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

c程序中存储空间布局

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

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

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

c程序存储空间布局

摘自:http://blog.csdn.net/zuokong/article/details/7006164   C程序一直由下面几部分组成:   (1) 栈 由编译器自动分配释放管理。局...

C程序存储空间布局

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

linux C程序的存储空间布局

UNIX环境高级编程第153有这么一张图 为了更好的理解的这张图,可以写个测试程序,查看各种变量所位于进程的真实位置   #include #include #include ...

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

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

linux C程序存储空间布局

典型的C程序 存储空间如下 正文段:CPU执行的及其指令部分 初始化数据段:程序中需要明确赋值的变量  如全局变量 int max=100 未初始化数据段:也称bss段,程序中没有明确赋值的变量如...

Linux环境编程之进程(二):程序的存储空间布局

引言: 一个写好的程序一般要存放在存储器中,那么程序中的代码、数据等各部分,是如何有规律的存放在存储器中的呢? (一) 一个存储的程序可分为五部分:正文段、初始化数据段、非初始化数据段、栈、堆。其典型...

转载:C++程序的存储空间布局

C++程序的存储空间布局 作者:JuKevinC++程序是由一下几部分组成:(1) 正文段 (.text)程序代码就存储咋text 段,这是由C P U执行的机器指令部分。通常,正文段是可共享的,所以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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