c语言内存问题

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

请解释下这两行注释

  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];,只是声明语句,下文没有进行使用。由于编译器的优化,它不会对内存起到任何作用。
即使下文使用了,再次循环也只是复用,而不会重新申请,因而也不会导致内存泄漏。

  • C语言使用sqlite3接口
  • 关于exception和specificity处理问题
  • 运行窗口显示大小(问题比较low)
  • ubuntu用mono4跑exe,读取app.config总是异常
  • 本机产生 数据文件,怎么自动上传到服务器端 (云端)?
  • memcpy函数形参指针类型能不能是char* ?
  • PHP多维数组排序问题
  • c++中char[ ]的赋值问题
  • linux内核编程找不到头文件
  • C++的引用问题
  • nullnull