分享

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

 SpringEmpire 2007-09-15

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

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



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1785632


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多