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

原创 2007年09月14日 21:01:00

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

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

相关文章推荐

LINUX程序(进程)在内存中的布局

翻译自: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/ 感谢作者, 尤其一些图 很漂亮,建议读者亲自读一遍英...

C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量

转自 http://blog.csdn.net/smstong/article/details/6578243 声明两点: (1)开发测试环境为VS2010+WindowsXP32位;...
  • arau_sh
  • arau_sh
  • 2011年08月12日 14:51
  • 549

一起talk C栗子吧(第一百二十九回:C语言实例--C程序内存布局一)

各位看官们,大家好,上一回中咱们说的是查看当前进程信息的例子,这一回咱们说的例子是:C程序内存布局。闲话休提,言归正转。让我们一起talk C栗子吧!...
  • talk_8
  • talk_8
  • 2016年03月24日 22:30
  • 754

C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数

最简单类及其对象内存布局。
  • smstong
  • smstong
  • 2011年07月04日 12:24
  • 2432

C 程序在内存中的布局 [李园7舍_404]

笔记题目比较高级,相信还有很多地方没有笔记清楚,主要是理思路类型,为具体抽象出C程序的每个部分与内存之间的关系图,也没有找到相关书籍查看到内存每个区域(静态区(代码段,只读(代码,数据),读写段),常...

C语言编程-----程序的内存布局

一:c语言程序的存储区域   由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代...
  • krysen
  • krysen
  • 2017年06月19日 22:07
  • 302

C语言编程程序的内存如何布局

C++程序的内存布局

对任何一个普通C++程序来讲,它都会涉及到5种不同的数据段。常用的几个数据段种包含有“程序代码段”、“程序数据段”、“程序堆栈段”等。不错,这几种数据段都在其中,但除了以上几种数据段之外,进程还另外包...
  • zzmgood
  • zzmgood
  • 2014年08月15日 10:39
  • 278

程序的内存布局

内存管理的艺术专题五:内存管理的艺术。包括以下章节: 动态内存分配 程序中的三国天下 程序的内存布局 头疼的野指针 经典错误,你犯了吗? 交通规则,还是应该遵守 程序文件的一般布局 代码在可执行程序中...

C语言程序的存储区域--内存布局

C语言程序的存储区域   由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,连接过程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序中的数据在内存中的布局
举报原因:
原因补充:

(最多只允许输入30个字)