现在的位置: 首页 > 综合 > 正文

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

2013年03月04日 ⁄ 综合 ⁄ 共 1030字 ⁄ 字号 评论关闭

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

.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中。它们是已经初始化的全局变量和静态变量。

抱歉!评论已关闭.