程序中的数据在内存中的布局

程序中的数据在内存中的布局

.bss和.data段是专用来存储全局变量的,在编译其间分配地址空间。
.data包含静态的己初始化的数据,而.bss包含未初妈化的数据。
.text段包含程序指令和和很多只读数据。

一个进程在内存中的数据组织如下图

+-------------------+  high address
|    env strings    |
+-------------------+
|    argv strings   |
+-------------------+
|    env pointers   |
+-------------------+
|    argv pointers  |
+-------------------+
|    argc           |
+-------------------+
|    stack          |
|      ^            |
|      |            |
|      |            |
|      v            |
|    heap           |
+-------------------+
|    .bss           |
+-------------------+
|    .data          |
+-------------------+
|    .text          |
+-------------------+  low address

1、stack

int func()
{
    int i = 0;
    ...
}

int main(int argc, char *argv[])
{
    int j;
}
i, j都存储于stack中。

2、heap

int main()
{
    char *data = malloc(10);
    ...
}

data指向一个地址,该地址在heap中

3、.bss

char global;
int main()
{
    ...
}

int main()
{
   static int bss_var;
}

global和bss_var存放于.bss中,它们是未初始化的全局变量和静态变量。

4、.data

char global = 'a';
int main(int argc, char *argv[])
{
    ...
}

int main(int argc, char *argv[])
{
    static char data_var = 'a';
}

global和data_var都存放在.data中。它们是已经初始化的全局变量和静态变量。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值