C++内存分配器架构

i.y*_*.y. 5 c++ memory allocation hoard

我需要在Linux下为C++编写Hoard分配器。虽然算法非常简单,但我不明白在哪里(以及如何)存储分配器数据(例如堆)

我是这么看的:分配器不是一个进程,而是一组任何应用程序都可以使用的函数。每个应用程序都有自己的堆。

  1. 应用程序启动时发生了什么?
  2. 分配器如何发现堆已经创建了?
  3. 分配器如何创建、存储和销毁(关闭应用程序时)堆?
  4. 当函数被调用时,如何找出它在哪个线程(或哪个处理器)中运行?

Car*_*rum 2

  1. 在应用程序启动期间可能不会发生太多事情,除非分配器被设计并挂接到应用程序启动代码中以抢先从操作系统请求一些内存。
  2. 堆并没有真正创建。当需要一些内存时,分配系统会向操作系统请求一些内存 - 无论是用于初始设置还是稍后需要额外内存来满足请求的分配时。在类 Unix 系统上,经常使用的系统调用称为sbrk。(严格来说,在 Linux 上,sbrk是系统调用的库函数包装器brk- 这对您来说可能是也可能不是重要的区别。)
  3. sbrk分配器使用上述调用从操作系统获取内存。之后,它就自行管理该内存。当应用程序退出时,操作系统会回收内存 - 它知道通过调用分发了什么sbrk内存,因此它知道需要收回哪些内存。
  4. 给定的代码片段在什么线程或处理器上运行几乎无关紧要 - 如果您多解释一下您所问内容的上下文,我会尽力回答。