C++函数执行完后内存释放问题

C++在执行函数的时候会先给函数体开辟一段内存来存贮函数的操作,还会为函数的变量开辟内存,最后返回函数结果。那么函数执行完了,函数体,函数变量(不考虑指针,都认为是实参副... C++在执行函数的时候会先给函数体开辟一段内存来存贮函数的操作,还会为函数的变量开辟内存,最后返回函数结果。
那么函数执行完了,函数体,函数变量(不考虑指针,都认为是实参副本的内存都会释放吗?返回的函数值内存会释放吗?
计算机新手,有点困惑这个问题。
展开
 我来答
友油妮薅
2015-10-24 · 致力于回答相关问题。
友油妮薅
采纳数:109 获赞数:1222

向TA提问 私信TA
展开全部
执行完后函数的变量会释放,函数体(也就是函数代码)不会释放,一直在代码段中,以后要调用的时候还可以进行调用。返回的函数值会放在你定义好的变量中,如果你没有接收返回值,那么该返回值会被丢弃。
尾浆金N
2012-08-11
知道答主
回答量:13
采纳率:0%
帮助的人:6.6万
展开全部
你能考虑到内存问题已经很不错了,不过C/C++指针以及内存管理问题一直都是新手迷茫的问题。
对于你的问题,我简单说几点吧:
1)在C/C++中内存有堆、栈之分(当然还有其他的,具体可以参考数据结构一类的书)。
2)堆是用户管理的,C中一般用malloc()和free()管理,C++用new 和delete管理,而栈是计算机管理的不需要用户干预,但栈的大小有限,特别是嵌入式系统,在函数调用时,对于大的结构体一般传指针(32位系统固定4个字节,其他系统等于AB(地址总线的宽度),参考微机原理一类的书),因为函数传参时,对于std_call,也需要压栈,大的结构体变量会使内存耗完,设备立马会死翘翘,而该类故障没用语法错误,很难排查,一旦交付到用户手里,出了问题就麻烦了。
3)对于一个函数不会给函数体开辟一段内存,函数原代码被编译器翻译成二进制后是放在代码段(CS段,可参考微机原理一类书籍),然后每一个函数会有一个入口地址,函数调用时会寻找这个地址,然后转到这个地址执行函数内部代码,当然调用的地址也会保持,以便返回,这叫函数调用时上下文(context),中断也有类似的过程(可参考微机原理一类的书籍)。
4)函数内部的变量我们叫局部变量(local variable),如:
int foo(void)
{
int test = 0;// Local variable.
int *ptr = (int*) malloc(sizeof(int));// for C/C++ languange,
objiect *o_ptr = new objiect();// for C++ only
}
test变量为局部变量,函数执行时分配内存,分配到栈上,函数执行完释放,ptr 和o_ptr 自己所占有的空间,同test变量,但是二者指向的空间被分配到了堆上,该函数被执行完后不会被释放,而会造成内存泄露。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦幻才子VM
2012-08-11
知道答主
回答量:29
采纳率:0%
帮助的人:16.8万
展开全部
执行完后函数的变量会释放,函数体(也就是函数代码)不会释放,一直在代码段中,以后要调用的时候还可以进行调用。返回的函数值会放在你定义好的变量中,如果你没有接收返回值,那么该返回值会被丢弃
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
镭毅
2012-08-11 · TA获得超过1394个赞
知道大有可为答主
回答量:1155
采纳率:0%
帮助的人:1087万
展开全部
C++存储分为代码区、变量区;

代码区,就是所说的函数体,是不释放的。

函数的局部变量一般随着函数的返回,就释放了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
翱翔缥缈
2020-08-11
知道答主
回答量:42
采纳率:0%
帮助的人:3.4万
展开全部
循环调用,函数体内存也会无限叠加。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式