c语言内存问题

while (1)
{
    int a[1024 * 10];//10K内存
    Sleep(20);//50×10K
}

请解释下这两行注释

阅读 2.7k
3 个回答
  1. 第一行表示在栈上申请40K(4 * 1024 * 10)大小的局部变量a(整型数组)。

  2. 第二行表示进程休眠20秒,至于注释是有问题的,休眠并不会申请内存。

  3. 每执行一遍while循环,局部变量a就会释放,然后重新在栈上重新申请。

栈上申请sizeof(int)*1024*10 byte(如果有的话);沉默20s;内存释放;
以上过程反复;





两行注释都是有问题的。
第一行并不是申请的10k内存,而是要根据根据编译器的定义,可能为4*10*1024字节,或8*10*1024字节。
第二行的sleep只是在20秒内让cpu不再对当前轮转区进行计算,与内存没有任何关系。


刚才评论有人说循环体内部会申请和释放内存,我还以为我一直的理解都是错的,赶紧写了个程序反编译看了下。虽然他都理解是错的,但我也疏忽的部分。
分别是
他理解错误的地方,正确的结果应该是

栈空间都是在头部申请的,并且只申请一次,而且只会在函数返回时释放。循环体内不会进行栈空间的释放。

我疏忽的地方:
本题中int a[1024 * 10];,只是声明语句,下文没有进行使用。由于编译器的优化,它不会对内存起到任何作用。
即使下文使用了,再次循环也只是复用,而不会重新申请,因而也不会导致内存泄漏。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进