一个典型的C程序存储空间布局

转载 2011年01月24日 13:23:00
一个典型的C程序存储空间布局由以下几个部分组成:

(正文段):   CPU执行的指令部分,也就是主要的程序代码编译出来的结果,只读,通常可以共享。

(初始化数据段):  通常称之为数据段,包含了程序中需要明确赋值的变量,譬如一些初始化的全局变量等,
                                 如 int a = 10,变量名和值都存放在这个段中。

(未初始化数据段):通常称之为BSS(Block Started by Symbol)段,包含了程序中没有进行赋值的变量,譬如一些未初始
                                    化的全局变量,如 int a,在程序执行之前,内核会把这部分全部置为0(NULL)

(栈):自动变量以及每次函数调用时所需保存的信息放在此段中。如函数调用时要保存返回地址等。栈是从上向下分配的。
(堆):     通常在堆中进行动态存储分配,如malloc, calloc, realloc等都从这里面分配。堆是从下向上分配的。



通常堆顶和栈底之间的虚拟地址空间是很大的。
对X86处理器上的Linux,正文段从0x08048000开始,栈底则从0xC0000000之下开始。
 

下图是一个典型的C程序存储空间的逻辑布局:

//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456/0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456/0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}

C程序存储空间布局(一)——各数据段的内存位置

从历史上讲,C程序一直由下面几部分组成: (1) 栈  由编译器自动分配释放管理。局部变量及每次函数调用时返回地址、以及调用者的环境信息(例如某些机器寄存器)都存放在栈中。新被调用的函数在栈上...

C程序存储空间布局--学习笔记

C程序的存储空间布局: 正文段:由CPU执行的机器指令部分,通常,正文段是可以共享的,所以即使频繁执行的程序在存储器中也只需有一个副本。通常,正文段只读,以防止程序由于意外而修改器自身的指令; ...

c程序中存储空间布局

一、正文段。可执行程序在存储空间的的副本,cpu执行的机器指令部分。 二、初始化的数据段。它包含明确地赋初值的变量。如: int a = 1; 此变量放于数据段。 三、未初始化的数据段。 内核将此...

C/C++程序的存储空间布局

由于历史原因,C程序一直由下列几部分组成: ★ 正文段。这是由C P U执行的机器指令部分。通常,正文段是可共享的,所以即使是经常执行的程序(如文本编辑程序、C编译程序、s h e l l等)在存储器...
  • iFuMI
  • iFuMI
  • 2016年09月28日 12:26
  • 421

C程序存储空间布局——各数据段的内存位置

转自: http://hi.baidu.com/peaksmile/item/7c31aa8b2e4dbb5826ebd9ad 从历史上讲,C程序一直由下面几部分组成: (1)...
  • fruitz
  • fruitz
  • 2014年11月29日 17:14
  • 310

Linux下C程序的存储空间布局

下面是对可执行文件aa运行size命令后得到的结果。      [root@xxx1 algriom]# size aa     text      data    bss    dec    h...

Linux下C程序的存储空间布局

下面是对可执行文件aa运行size命令后得到的结果。      [root@xxx1 algriom]# size aa     text      data    bss    dec    h...

Linux size命令和C程序的存储空间布局

Linux size命令 C程序的存储空间布局

C程序的存储空间布局(二)

2012年12月28日 C程序的存储空间布局(二)   在我上一篇随笔中,我讨论了一个由于数组越界导致程序陷入死循环的情况及其原因。不过,其中还是有些疑问:如果变量跟数组处于同一数...

c程序存储空间布局

摘自:http://blog.csdn.net/zuokong/article/details/7006164   C程序一直由下面几部分组成:   (1) 栈 由编译器自动分配释放管理。局...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个典型的C程序存储空间布局
举报原因:
原因补充:

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