先看下面的一段程序:
char *string = "Hello World";
int iSize;
char *fun(void)
{
char *p;
iSize = 8;
p = malloc(iSize);
return p;
}
存放的位置
Text段:用来存放代码(二进制文件)和常量,该段的数据通常是只读的
Data段: 已经初始化了的全局变量string就存放在该段,Data段用来存放初始化了的变量,即初始化了的全局变量和静态变量
BSS段: 未初始化的全局变量iSize存放在这,BSS段主要存放在未初始化的变量,即未初始化的全局变量和静态变量
Heap段: 程序员手动分配的malloc(iSize)这篇内存存放在该段,也需要用户自行释放
Stack段:函数里的局部变量*p存放在该段,Stack段主要存放局部变量、临时变量、函数相互调用的返回的地址,该段由编译器自行分配和释放
那接下来我们来看看,它们什么被分配了内存,什么时候释放内存:
全局变量和静态变量:程序开始的时候就分配了,程序结束时候释放内存
局部变量:函数调用的时候为变量分配内存,调用结束释放内存
堆里的:调用malloc时分配内存,调用free时释放