当前位置: 技术问答>linux和unix
内存泄露的问题
来源: 互联网 发布时间:2016-12-27
本文导语: 请教各位,局部变量的大小是否会有限制?为什么我定义了一个2M的局部变量不能释放内存? void fun() { char buf[1024][1024][2]; char buf1[1024][1024][2]; memset(&buf, 0, sizeof(buf)); } int main(int argc, char *argv[]) { int i=0; ...
请教各位,局部变量的大小是否会有限制?为什么我定义了一个2M的局部变量不能释放内存?
void fun()
{
char buf[1024][1024][2];
char buf1[1024][1024][2];
memset(&buf, 0, sizeof(buf));
}
int main(int argc, char *argv[])
{
int i=0;
printf("Hello, world!n");
fun();
while(1)
{
};
return EXIT_SUCCES;
}
就是这样的一个小测试程序,fun函数执行过后会发现内存没有释放
fun执行前后的内存使用情况的对比:
Mem: 7528K used, 21616K free, 0K shrd, 0K buff, 3412K cached
Mem: 11636K used, 17508K free, 0K shrd, 0K buff, 3412K cached
void fun()
{
char buf[1024][1024][2];
char buf1[1024][1024][2];
memset(&buf, 0, sizeof(buf));
}
int main(int argc, char *argv[])
{
int i=0;
printf("Hello, world!n");
fun();
while(1)
{
};
return EXIT_SUCCES;
}
就是这样的一个小测试程序,fun函数执行过后会发现内存没有释放
fun执行前后的内存使用情况的对比:
Mem: 7528K used, 21616K free, 0K shrd, 0K buff, 3412K cached
Mem: 11636K used, 17508K free, 0K shrd, 0K buff, 3412K cached
|
局部变量在栈上, 在进入函数前就已经预留了空间,不初始化只涉及栈top指针的移动. 不初始化的话,编译器可能优化掉它. 也可能不发生缺页中断.