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

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

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

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

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

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

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

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

========高地址   =======

程序栈        堆栈段

向下增长

“空洞”       =======

向上增长

------          数据段

BSS

------

非零数据

=========低地址   =======

=========       =======

代码           代码段

=========       =======

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

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

时间: 2024-11-05 13:40:22

代码段、数据段、堆栈段辨析的相关文章

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

1.高位地址:栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行) 2.           堆(给动态分配内存是使用),向上生长             (可读可写可执行) 3.           数据段(保存全局数据和静态数据)                    (可读可写不可执行) 4.地位地址:代码段(保存代码)                                (可读可执行不可写) 代码段就是存储程序文本的,所以有时候也叫做文本段,指令指针中的指令就

转:程序内存空间(代码段、数据段、堆栈段)

https://blog.csdn.net/ywcpig/article/details/52303745 在冯诺依曼的体系结构中,一个进程必须有:代码段,堆栈段,数据段. 进程的虚拟地址空间图示如下: BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域.数据

JVM-如何判断一段数据是真正的数据,还是对象的引用

JVM 判断一段数据到底是数据还是引用类型,首先要看JVM选择用什么方式.通常这个选择会影响到GC的实现. 一.保守式 如果JVM选择不记录任何这种类型的数据,那么它就无法区分内存里某个位置上的数据到底应该解读为引用类型还是整型还是别的什么.这种条件下,实现出来的GC就会是“保守式GC(conservative GC)”. 在进行GC的时候,JVM开始从一些已知位置(例如说JVM栈)开始扫描内存,扫描的时候每看到一个数字就看看它“像不像是一个指向GC堆中的指针”.这 里会涉及上下边界检查(GC堆

Excel2007数据透视表字段设置按钮为灰色

作者:iamlaosong 刚从Excel2003转到Excel2007,菜单不太熟悉,一个功能往往要找半天,做数据透视表自然也会碰到一些问题,这里说说字段设置时碰到的一个问题.Excel2007数据透视表字段设置可以设置对数据字段的处理方式,包括求和.计数.平均值.最大值.最小值.乘积.数值计算.标准偏差.总体标准偏差.方差和总体方差.字段设置网上有很多文章描述,这里就不多说了. 我在做字段设置时,发现"字段设置"按钮为灰色,点击不起作用,折腾半天才发现,设置字段时如果是左边字段(行

mysql 不同库不同表字段数据复制

需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_manager_folder f2 ON f1.name = f2.name AND f2.parentId = 54 SET f1.parentId = 54 WHERE f2.name IS NULL AND f1.id IN (1,2,3); 实现sql语句2: update B set extra = A.extr

Linux中的段管理,bss段,data段,

Linux 的段管理, BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 该段用于存储未初始化的全局变量或者是默认初始化为0的全局变量, data段 该段用于存储初始化的全局变量,初始化为0的全局变量出于编译优化的策略还是被保存在BSS段,数据段也是属于静态内存分配. text段:text段是用于存放程序代码的,编译时确定,内存区域通常属于只读, rodata段

保护模式_1_段寄存器_段描述符_段选择子

1 段寄存器 1-1 段寄存器的结构 图示: 结构体表示: struct SegMent { WORD Selector; WORD Attribute; DWORD Base; DWORD Limit; } 1-2 段寄存器的属性探测 可以通过MOV指令进行读写(LDTR和TR除外) 段寄存器成员简介 探测Attribute是否存在 int var=0; int main() { __asm { mov ax, ss //cs不行 cs是可读 可执行 但不可写 mov ds, ax mov d

国内手机号码段,卫星电话号段

手机号码段 电信 中国电信手机号码开头数字 133.153.180.181.189.177.173.149 联通 中国联通手机号码开头数字 130.131.132.155.156.145.185.186.176 移动 中国移动手机号码开头数字 134.135.136.137.138.139.150.151.152.158.159.182.183.184.157.187.188 147.178 补充 14号段以前为上网卡专属号段,如中国联通的是145,中国移动的是147等等. 170号段为虚拟运营

[数学] 将长为L的木棒随机折成3段,则3段构成三角形的概率

1.题目 如题,将长为L的木棒随机折成3段,则3段构成三角形的概率是多少? 2.解析 这个与其说是编程题目,倒不如说是个数学题目.可能是你没有见过,或者没有过这种解题思想.(还是那句,一回生两回熟,类推吧) 设分成的三段木棍的长度分别为:x,y,L-x-y. (1)首先,三边长度都大于0.可以有下面的推导公式: 可以知道,满足条件的区域面积为,(1/2)*L*L,如下所示(就是阴影区域的面积大小): (2)其次,要构成三角形,必须满足任意两边之和大于第三边(也就是任意两边之差小于第三边).可以有