[问题]区域变量的内存释放

楼主: larkes (larkes)   2017-07-20 01:03:47
假设我有一个函式 ,函式的程式码如下:
int function()
{
//小区块:
{
int my_array[100] = {0};
}
return 0;
}
从上述的程式码可知, my_array是宣告在一个小区块里面.
我的问题是:
当程式执行小区块的时候,它应该会配置一个连续的内存空间
用来存放my_array的所有元素.
那程式离开那个小区块之后,
是不是在function()还没return之前,虽然我们不能使用my_array了,
但是my_array占用的内存空间还存在吗?
还是说一离开这个小区块, my_array的内存空间就马上被释放了,
不需要等到function()做return呢?
不好意思,谢谢指教!
作者: johnjohnlin (嗯?)   2017-07-20 01:10:00
这个不会被释放吧,反正都在stack
作者: Hazukashiine (私は幸せです)   2017-07-20 01:27:00
释放这个词不够精确 没有指名释放的对象如果对象是作业系统的话 答案是否定的但是如果对象是 stack pointer 的话 在理想的情况下sp 会升回较高的内存地址 如果这个时候再遇到了下一个小区块 很可能用到的空间就会是前一个区块的你可以做实验 下一个区块不初始化 直接去读里面的值虽然没有保证一定会如我所说的 但是有很高的机率是嗯... 刚刚试了一下 写不出 MWE... 编译器太聪明惹~
楼主: larkes (larkes)   2017-07-20 08:22:00
@johnjohnlin: 谢谢喔!@Hazukashiine: 谢谢你详细的描述,最后一句"MWE"是什么意思呢?
作者: wudidog (呜啦啦)   2017-07-20 09:04:00
记得没错的话,不会释放,要到函数结束才会释放
作者: Hazukashiine (私は幸せです)   2017-07-20 11:21:00
MWE = minimal working example
作者: dou0228 (7777)   2017-07-20 15:45:00
stack 有啥放不放的?
楼主: larkes (larkes)   2017-07-21 07:34:00
@wudidog,@Hazukashiine 谢谢囉!

Links booklink

Contact Us: admin [ a t ] ucptt.com