while (1)
{
int a[1024 * 10];//10K内存
Sleep(20);//50×10K
}
请解释下这两行注释
两行注释都是有问题的。
第一行并不是申请的10k内存,而是要根据根据编译器的定义,可能为4*10*1024
字节,或8*10*1024
字节。
第二行的sleep只是在20秒内让cpu不再对当前轮转区进行计算,与内存没有任何关系。
刚才评论有人说循环体内部会申请和释放内存,我还以为我一直的理解都是错的,赶紧写了个程序反编译看了下。虽然他都理解是错的,但我也疏忽的部分。
分别是
他理解错误的地方,正确的结果应该是
栈空间都是在头部申请的,并且只申请一次,而且只会在函数返回时释放。循环体内不会进行栈空间的释放。
我疏忽的地方:
本题中int a[1024 * 10];,只是声明语句,下文没有进行使用。由于编译器的优化,它不会对内存起到任何作用。
即使下文使用了,再次循环也只是复用,而不会重新申请,因而也不会导致内存泄漏。
第一行表示在栈上申请40K
(4 * 1024 * 10)
大小的局部变量a(整型数组)。第二行表示进程休眠20秒,至于注释是有问题的,休眠并不会申请内存。
每执行一遍while循环,局部变量a就会释放,然后重新在栈上重新申请。