.text .data .bss stack heap 分析

前几天面试被人问到的一个题目 自己只知道堆栈  被人鄙视了 今天索性自己总结下  以备后用

.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” 所以为常量区


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值