变量的内存布局

写段代码测试一下变量的内存分布:

#include <cstdlib>
#include <cstdio>

char bss_global;
char rw_data_global = 0;
const char ro_data1 = 0;
static char rw_data_static = 0;

int main() {
  static char bss_static;
  char stack1;
  char stack2[] = {"Hello world!"};
  const char stack3 = 0;
  const char* ro_data2 = "Hello world!";
  char* heap1 = (char*)malloc(10*sizeof(char));
  char* heap2 = new char(0);

  printf("---------------------------\n");
  printf("stack:           %.8p\n", stack2);
  printf("stack:           %.8p\n", &stack3);
  printf("stack:           %.8p\n", &stack1);
  printf("---------------------------\n");
  printf("heap:            %.8p\n", heap2);
  printf("heap:            %.8p\n", heap1);
  printf("---------------------------\n");
  printf("bss:             %.8p\n", &bss_static);
  printf("bss:             %.8p\n", &bss_global);
  printf("---------------------------\n");
  printf("read write data: %.8p\n", &rw_data_static);
  printf("read write data: %.8p\n", &rw_data_global);
  printf("---------------------------\n");
  printf("read only data:  %.8p\n", &ro_data1);
  printf("read only data:  %.8p\n", ro_data2);
  printf("---------------------------\n");
  printf("text:            %.8p\n", main);
  printf("text:            %.8p\n", malloc);
  printf("text:            %.8p\n", printf);
  printf("---------------------------\n");

  free(heap1);
  delete heap2;
  return 0;
}

Linux上结果如下:

---------------------------
stack:           0xbfe1cdbf
stack:           0xbfe1cdbe
stack:           0xbfe1cdbd
---------------------------
heap:            0x08bf8018
heap:            0x08bf8008
---------------------------
bss:             0x0804a037
bss:             0x0804a034
---------------------------
read write data: 0x0804a036
read write data: 0x0804a035
---------------------------
read only data:  0x08048923
read only data:  0x08048870
---------------------------
text:            0x08048594
text:            0x080484b0
text:            0x08048490
---------------------------

Windows上结果如下:

---------------------------
stack:           001BFDD4
stack:           001BFDD3
stack:           001BFDD2
---------------------------
heap:            003CB320
heap:            003CB308
---------------------------
bss:             0104CDE3
bss:             0104CDE0
---------------------------
read write data: 0104CDE2
read write data: 0104CDE1
---------------------------
read only data:  01049148
read only data:  0104915C
---------------------------
text:            01041000
text:            010412CE
text:            01041375
---------------------------

为什么bss_static在rwdata之上?涉及到static变量的生命周期:bss_global在程序启动时分配,而main函数运行到该代码处才为bss_static分配空间。

转载于:https://www.cnblogs.com/chenkkkabc/archive/2013/03/31/2991616.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值