进程控制块,数据段,程序段各自在内存的什么地方

进程控制块,数据段,程序段各自在内存的什么地方,第1张

进程控制块(PCB)在系统内存中,可以和其他进程同步执行

数据段存在静态内存,用于保存程序已经初始化的变量

代码段紧接着数据段,也在静态内存中

另外还有保存局部变量的栈和保存动态分配空间的堆

在内存中它们如下关系:

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

程序栈        堆栈

向下增长

空内存

向上增长

------          数据段

BSS

------

非零数据

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

代码           代码段

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

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

栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行)

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

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

代码段(保存代码)                                                   (可读可执行不可写)

较好的编程习惯是代码段放代码、数据段放数据、栈段用来保存环境恢复环境以及存放少量的局部变量。

但这些分段并不是绝对的,早期的程序并没有这些规矩,代码、数据是容许混放的,16位的com格式的程序代码、数据段、附加数据段、栈段是容许同段的。

单独拿数据来说,数据是可以放在内存中的任何地方,只要容许你访问。数据可以放在代码段中,可以放在栈中,也可以放在系统的堆内存中。

你说的堆栈 是指内存中的 堆和栈吧, 有些人也喊栈叫 堆栈, 堆和栈是 *** 作系统为应用程序在内存中分配的一部分空间,栈通常是用来保存局部变量等,d栈压栈 *** 作等, 而堆通常是用来存储程序员申请的空间,比如new *** 作,通常需要程序员自己去delete,不然就形成僵尸内存,

而堆栈段 应该是汇编里面的 堆栈段寄存器中的一个说法吧?

堆栈段寄存器在汇编中称为 SS, Stack Segment, 是一种寄存器 。是cpu的组件吧。

以下是copy的

为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:

CS(Code Segment):代码段寄存器;

DS(Data Segment):数据段寄存器;

SS(Stack Segment):堆栈段寄存器;

ES(Extra Segment):附加段寄存器。

当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。 所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。

以上纯属个人见解~ 不要拍我

你的程序并没有定义栈段。

若定义了,则应:

mov ax,seg sdeg

mov ss,ax

mov sp,top ------因为栈结构是从高地址向低地址生长的,要把栈段的最高处的偏移赋给sp

直接写 MOV AX, [BX] 是可以的,因为通过寄存器ax可以确定是传送的“字”

一个由C/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack)

由编译器自动分配释放

,存放函数的参数值,局部变量的值等。其 *** 作方式类似于数据结构中的栈。

2、堆区(heap)

一般由程序员分配释放,

若程序员不释放,程序结束时可能由OS回收

。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,

未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

-

程序结束后有系统释放

4、文字常量区

常量字符串就是放在这里的。

程序结束后由系统释放

5、程序代码区

存放函数体的二进制代码

汇编代码中的数据段、堆栈段、代码段、附加段具体指:

代码段,数据段,分别存入程序和数据

堆栈段是一块空白的空间用来为堆栈 *** 作作准备

附加段是对数据段的补充

数据

有字节DB,字DW,双字DD,长字DQ和十字节变量DT

希望对你有所帮助,望采纳!!!

以上就是关于进程控制块,数据段,程序段各自在内存的什么地方全部的内容,包括:进程控制块,数据段,程序段各自在内存的什么地方、汇编语言 数据段 代码段 堆栈段 数据怎么看、堆栈和堆栈段的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9969611.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存