c程序内存四区的个人理解 代码是vc6.0运行结果。
栈:由编译器自动分配释放,存放函数的参数值,局部变量等, 存放在这里的变量地址不能作为返回值返回,因为这部分分配的内存会被析构,当你访问这块内存时,这块内存可能已经不存在了,只剩下返回的首地址了。
比如:
char *fun()
{
char a[];//临时变量 存放在栈区
char *p = NULL;
p = "dssda";//存储在常量区 可以返回 但是被操作系统保护 不能强制修改这块内存的值。
return a;
}
堆区:一般由程序员分配释放(动态内存申请和释放malloc/free),若程序员不释放,程序结束时 可有操作系统回收
全局去:全局变量和静态变量存放在此,里面细分有一个常量区,字符串和其他常量也放在此处,由操作系统释放。
代码区:存放函数体的二进制代码
//main.cpp
int a=0; //全局初始化区
char *p1; //全局未初始化区
main()
{
int b;栈
char s[]="abc"; //栈
char *p2; //栈
char *p3="123456"; //123456\0在常量区,p3在栈上。
static int c=0; //全局(静态)初始化区
p