前几天面试被人问到的一个题目 自己只知道堆栈 被人鄙视了 今天索性自己总结下 以备后用
.text:程序段大小
.data:有初始值的全局变量和static变量
.bss:未初始化的全局变量
stack:保存函数局部变量和参数 “先进后出”
heap:保存函数内部动态分配内存 (malloc)
下面分析一个这个程序段:
int a;
int b = 3;
void test(int e){
int c;
int d = 4;
int f;
c = 5;
f = e+c+d;
}
a 未初始化全局变量 bss段
b 初始化全局变量 data段
c 局部变量 stack段
d 局部变量 stack段
这是从网上找的 供参考
int a=0; //全局初始化区
char *p1; //全局未初始化区
main()
{
intb; //栈
char s[]=”abc”; //栈
char *p2; //栈
char *p3=”123456″; //123456\0在常量区,p3在栈上。
static int c=0; //全局(静态)初始化区
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //分配得来得10和20字节的区域就在堆区。
strcpy(p1,”123456″); //123456\0放在常量区,编译器可能会将它与p3所向”123456″优化成一个地方。
}
S[] 为数组 有空间存储“abc” 所以存储在栈
*p 没有空间存贮 “123456” 所以为常量区