进阶_ASM_1_内存模型抽象

本文详细介绍了内存的3个主要段:堆、栈和代码段。堆是通过空闲表和链表管理的大数组,不常进行压缩。栈用于存储活动记录,与活动函数数量成比例。代码段则存放机器码。讨论了定长和变长指令编码在不同指令集中的应用。
摘要由CSDN通过智能技术生成

1 内存的 3 segment 模型

在这里插入图片描述

2 Heap Segment

堆内存管理器”负责“”的管理!
这里有个概念叫做“空闲表”!堆内存管理器是以“链表”的数据结构为基础管理堆中的一个个数据块的!

2.1 堆是个大数组!

  • 整个“堆”的概念
    在这里插入图片描述
  • 堆中单个数据块的结构:
    在这里插入图片描述

思考:如果对“静态”数组使用free()会造成什么后果?
:假如 free() 成功了!会把“”中的空间加入到堆管理器的“空闲表”里面!

2.2 “堆内存压缩”概念

一般现在的计算机不支持“堆内存压缩”,因为现在的内存都很大了(普遍达到 8/16/32GB),不需要去堆区里面抠唆那么一点点空间!

Macintosh(1994~1995) 支持堆内存压缩,可以将已经使用的数据块放在一起,没使用的数据块放在一起,从而可以拼出更大的空闲数据块!

在这里插入图片描述

但是也有问题哦:堆内存管理器在移动数据块的时候,这些数据不能被访问!即:堆内存的压缩与2级指针的 dereference 不能同时执行!

使用“可压缩的Heap” 的步骤:

void **handle = NewHandle(40); // 二级指针开辟(可压缩的)动态内存
...
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值