关于内存分区的疑问,基础请不要笑我呵^_^

约翰尼 2007-04-28 09:37:12
学汇编的时候说内存分为CS,DS,ES等段

学C的时候又说分为:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

究竟这两种分法是怎么联系起来的?
...全文
199 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxcnjupt 2007-04-29
  • 打赏
  • 举报
回复
一种是链接器和编译器使用的“段”,意思是“把相同的内容放在一起,便于处理”

另一种是CPU识别的段,供CPU寻址用的。
mengshijie_1981 2007-04-29
  • 打赏
  • 举报
回复
>学汇编的时候说内存分为CS,DS,ES等段

用于CPU寻址内存,这些寄存器起到起始地址的作用,好比数组的首地址一样,IP、SP、DI、SI等相当于数组的下标,与CS、SS、DS、ES等配合,来寻址内存的每一个单元。

>学C的时候又说分为:1、栈区(stack)— 由编译器自动分配释放 (警告:此句有误!),存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

由编译器或者由用户程序使用编译器伪指令为应用程序指定默认数量或者指定数量的内存作为堆栈使用,堆栈通过SS、SP进行寻址。

> 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

由应用程序通过指令在程序的虚拟地址空间上分配内存,然后操作系统映射该地址空间到物理内存。在程序运行过程中,通过指令分配的。
> 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

在程序的地址空间分配的地址空间,在程序编译时指定,加载时分配的,通过加载器分配的。
约翰尼 2007-04-28
  • 打赏
  • 举报
回复
还有在第二种分法中漏的

4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧