操作系统--UNIX代码段和数据段分开

(1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作----它是不可写的。

(2)数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。

(3)BSS段:BSS段包含了程序中未初始化的全局变量,在内存中bss段全部置零。

(4)堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或者缩减。当进程调用malloc等函数分配内存的时候,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存的时候,被释放的内存从堆中被剔除(堆被缩减),它的物理内存空间是由程序申请的,并由程序负责释放。

(5)栈:栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出的特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

实际上,在Linux系统下并没有强调分段,每一个进程缺省情况下“数据段”,“堆栈段”和“代码段”都使用等价的段描述,映射到相同的线性地址空间,除非你个别设置LDT。

时间: 2024-10-12 04:37:56

操作系统--UNIX代码段和数据段分开的相关文章

操作系统学习(五) 、代码段和数据段描述符

一.代码段和数据段描述符格式 段描述符通用格式如下所示: 代码段和数据段描述符中各个位的含义如下所示: 二.代码段和数据段描述符类型 当段描述符中S标志位(描述符类型)被置位,则该描述符用于代码段或数据段.此时类型字段中最高比特位(第二个双字的位11)用于确定是数据段描述符(复位)还是代码段描述符(置位). 代码段和数据段描述符类型如下所示: 对于数据段描述符,类型字段的低3位(位8,9,10)分别用于表示已访问A,可写W,和扩展方向E,根据可写比特位W的设置,一个数据段可以是只读的,也可以是可

C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域.数据段属于静态内存分配. 代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于 

可执行程序包括BSS段、数据段、代码段

可执行程序包括BSS段.数据段.代码段(也称文本段). 一.BSS BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域.特点是:可读写的,在程序执行之前BSS段会自动清0.所以,未初始的全局变量在程序执行之前已经成0了. 注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量. UNIX下可使用size命令查看可执行文件的段大小信息.如size a.out. 二.数据段 在采

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

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

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

1.高位地址:栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行) 2.               堆(给动态分配内存是使用),向上生长                  (可读可写可执行) 3.               数据段(保存全局数据和静态数据)                             (可读可写不可执行) 4.地位地址:代码段(保存代码)                                             (可读可执行不可写)

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

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

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

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. 代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区 域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读

内存分配(堆、栈、BSS、代码段、数据段)

这两天看了马士兵老师的视频.视频中提到了一个万能钥匙.就是了解程序运行中对内存的操作.主要讲了堆.栈.Data.说真的有点晕.看了两遍.也就略懂一二.在这做个小小知道总结 简介 我们程序运行的时候都是放在内存里的.根据静态.成员函数.代码段.对象.等等.放在不同的内存分块里.大概分为5块 1  栈 2  堆 3 BSS段-全局区-(静态区) 4 代码段 5 数据段 栈 存放局部变量.临时变量.声明.返回值.指向堆对象的地址(指针).总之存放一些小的东西.当不需要时候.栈会自动清除.比如一个加法方

程序运行中(BSS段、数据段、代码段、堆栈)

程序运行中(BSS段.数据段.代码段.堆栈) BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域.数据段属于静态内存分配. 代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域.这部分区域的大小