代码段、数据段、堆栈段、数据段

简介:

1、高位地址:栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行)

2、           堆(给动态分配内存是使用),向上生长             (可读可写可执行)

3、           数据段(保存全局数据和静态数据)                    (可读可写不可执行)

4、地位地址:代码段(保存代码)                                (可读可执行不可写)

 

 

代 码段就是存储程序文本的,所以有时候也叫做文本段,指令指针中的指令就是从这里取得。这个段一般是可以被共享的,比如你在Linux开了2个Vi来编辑文 本,那么一般来说这两个Vi是共享一个代码段的,但是数据段不同(这点有点类似C++中类的不同对象共享相同成员函数)。

        数据段是存储数据用的,还可以分成初始化为非零的数据区,BSS,和堆(Heap)三个区域。初始化非零数据区域一般存放静态非零数据和全局的非零数据。 BSS是Block Started by Symbol的缩写,原本是汇编语言中的术语。该区域主要存放未初始化的全局数据和静态数据。还有就是堆了,这个区域是给动态分配内存是使用的,也就是用 malloc等函数分配的内存就是在这个区域里的。它的地址是向上增长的。

        最后一个堆栈段(注意,堆栈是Stack,堆是Heap,不是同一个东西),堆栈可太重要了,这里存放着局部变量和函数参数等数据。例如递归算法就是靠栈实现的。栈的地址是向下增长的。具体如下:

========高地址   =======
程序栈        堆栈段

向下增长


“空洞”       =======

向上增长


------          数据段
BSS
------
非零数据
=========低地址   =======

=========       =======
代码           代码段
=========       =======

        需要注意的是,代码段和数据段之间有明确的分隔,但是数据段和堆栈段之间没有,而且栈是向下增长,堆是向上增长的,因此理论上来说堆和栈会“增长到一起”,但是操作系统会防止这样的错误发生,所以不用过分担心。

 

来源:http://www.cnblogs.com/qlee/archive/2011/09/07/2169831.html




本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/archive/2013/04/26/3045753.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
存储 程序员 编译器
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
30 0
|
3月前
|
存储 安全
【汇编】在代码段使用数据,在代码段使用栈
【汇编】在代码段使用数据,在代码段使用栈
【汇编】在代码段使用数据,在代码段使用栈
|
4月前
|
消息中间件 存储 开发者
解析进程复制:父子进程内存地址的神秘之处
解析进程复制:父子进程内存地址的神秘之处
33 0
|
9月前
|
存储 程序员 编译器
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
158 0
|
11月前
|
存储 程序员 Linux
再谈应用程序分段:代码段、数据段、bss以及堆和栈
再谈应用程序分段:代码段、数据段、bss以及堆和栈
264 0
|
算法 数据安全/隐私保护 C++
程序地址空间
程序地址空间
程序地址空间
|
存储 Linux C++
linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】
转自:http://blog.csdn.net/gongweijiao/article/details/8207333 原文参见:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201215115845553/    一)概述   .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储。
1063 0
|
机器学习/深度学习 存储 Linux
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
汇编(二) 内存地址空间、寄存器、物理地址以及物理地址的计算
汇编、内存地址空间、寄存器、物理地址、物理地址的计算、汇编指令
4818 1