作者larkes (larkes)
看板C_and_CPP
标题[问题]区域变数的记忆体释放
时间Thu Jul 20 01:03:47 2017
假设我有一个函式 ,函式的程式码如下:
int function()
{
//小区块:
{
int my_array[100] = {0};
}
return 0;
}
从上述的程式码可知, my_array是宣告在一个小区块里面.
我的问题是:
当程式执行小区块的时候,它应该会配置一个连续的记忆体空间
用来存放my_array的所有元素.
那程式离开那个小区块之後,
是不是在function()还没return之前,虽然我们不能使用my_array了,
但是my_array占用的记忆体空间还存在吗?
还是说一离开这个小区块, my_array的记忆体空间就马上被释放了,
不需要等到function()做return呢?
不好意思,谢谢指教!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.177.11.187
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1500483830.A.12E.html
1F:→ johnjohnlin: 这个不会被释放吧,反正都在stack 07/20 01:10
2F:→ Hazukashiine: 释放这个词不够精确 没有指名释放的对象 07/20 01:27
3F:→ Hazukashiine: 如果对象是作业系统的话 答案是否定的 07/20 01:27
4F:→ Hazukashiine: 但是如果对象是 stack pointer 的话 在理想的情况下 07/20 01:28
5F:→ Hazukashiine: sp 会升回较高的记忆体地址 如果这个时候再遇到了 07/20 01:29
6F:→ Hazukashiine: 下一个小区块 很可能用到的空间就会是前一个区块的 07/20 01:30
7F:→ Hazukashiine: 你可以做实验 下一个区块不初始化 直接去读里面的值 07/20 01:31
8F:→ Hazukashiine: 虽然没有保证一定会如我所说的 但是有很高的机率是 07/20 01:32
9F:→ Hazukashiine: 嗯... 刚刚试了一下 写不出 MWE... 编译器太聪明惹~ 07/20 01:39
10F:→ larkes: @johnjohnlin: 谢谢喔! 07/20 08:22
11F:→ larkes: @Hazukashiine: 谢谢你详细的描述, 07/20 08:23
12F:→ larkes: 最後一句"MWE"是什麽意思呢? 07/20 08:24
13F:推 wudidog: 记得没错的话,不会释放,要到函数结束才会释放 07/20 09:04
14F:→ Hazukashiine: MWE = minimal working example 07/20 11:21
15F:→ dou0228: stack 有啥放不放的? 07/20 15:45
16F:→ larkes: @wudidog,@Hazukashiine 谢谢罗! 07/21 07:34