Assembly 程序集堆…正在尝试学习以进行测试

Assembly 程序集堆…正在尝试学习以进行测试,assembly,stack,heap,Assembly,Stack,Heap,我马上就要考试了,我们得好好学习。堆叠的部分我理解,但堆给我带来了麻烦 我们的书给我们提供了C语言和汇编语言。但我很难理解这两个概念 我会贴一张这本书的截图,这样看起来会更好 问题: 堆初始化如何工作? 堆如何分配工作? 堆发布是如何工作的? 感谢大家花费的时间和精力。从这个意义上讲,堆是一个内存区域,而不是程序可以用来存储大量数据的堆栈 但是,在程序的生命周期内,该程序必须跟踪自己的内存使用情况。具体地说,程序不能一时兴起写入其整个虚拟地址空间;如果它试图写入的地址未被操作系统映射,将

我马上就要考试了,我们得好好学习。堆叠的部分我理解,但堆给我带来了麻烦

我们的书给我们提供了C语言和汇编语言。但我很难理解这两个概念

我会贴一张这本书的截图,这样看起来会更好

问题:

  • 堆初始化如何工作?

  • 堆如何分配工作?

  • 堆发布是如何工作的?


感谢大家花费的时间和精力。

从这个意义上讲,堆是一个内存区域,而不是程序可以用来存储大量数据的堆栈

但是,在程序的生命周期内,该程序必须跟踪自己的内存使用情况。具体地说,程序不能一时兴起写入其整个虚拟地址空间;如果它试图写入的地址未被操作系统映射,将触发访问冲突,这将导致您的程序接收到错误并被终止

因此,正在运行的程序必须要求操作系统分配一些空间。如果可以,操作系统将执行此操作,并将该空间映射到虚拟地址空间

然而,如果您需要释放部分内存,您需要知道它在哪里以及您正在使用它做什么。此外,您还需要知道,由于程序给定了特定大小的内存,在哪里存储它。你看,事情很快就变得复杂了——如果你从C中分配了大量内存,然后又频繁地释放,那么在分配和释放以及系统调用之间建立1-1映射就没有意义了。相反,如果内存分配器只是从操作系统中取出一大块内存,然后跟踪它,那就更好了

输入对存储结构的需求,以跟踪分配的空间中当前正在使用的空间,以及虚拟地址空间中标记出要使用的范围

所以

  • Heap_Init设置此结构,并且可能在任何现代分配器中初始化一些内存
  • Heap_Allocate使用此结构,并在给定请求时返回指向可用空间的指针。这可能需要程序从操作系统请求更多空间,也可能不需要
  • Heap_Free使用该结构来释放先前分配的内存

这就是这些函数的作用原理。如果您查看代码,您应该能够了解您的具体实现在做什么。

谢谢您。。。我能请你帮个小忙吗?如果你能用一行一行地解释Heap_Init(只有10行)来编辑你的答案,那就太好了,因为我完全不知道它想做什么。@bluejamesbond我可以-但那会破坏你学习练习的重点,不是吗?;)这真的不是运动。这只是为了考试而学习。我不想在不学习的情况下给教授发电子邮件。更具体地说。这是pshx和普利,我在堆困惑_iniT@bluejamesbond它们转换为推x和拉y(从堆栈中)。-1。抱歉,您需要表现出一些良好的努力,并提出与您面临的问题相关的具体问题。