1)栈区(stack)——存储参数值、局部变量,维护函数调用关系等。
2)堆区(heap)——动态内存区域,随时申请和释放,程序自身要对内存泄漏负责。
3)全局区(静态区)——存储全局和静态变量。
4)字面量区——常量字符串存储区。
5)程序代码区——存储二进制代码。

接下来写一段C代码来理解一下各变量分别存在哪个段区,代码如下
int a=0; //全局初始化区
char *p1; //全局未初始化区
main()
{
static int b=0; //全局(静态)初始化区
int c;//栈
char d[]="abc"; //栈
char *p2; //栈
char *p3 = "hello"; //hello\0在常量区,p3在栈上
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //分配得来的10和20字节的区域就在堆区
strcpy(p1,"hello"); //hello\0放在常量区,编译器可能会将它与p3所指向的"hello"优化成一个地方
}
总体来讲,栈上的变量是局部的,随着局部空间的销毁而销毁,由系统负责。
网友评论