Abl*_*ose 6 c embedded microcontroller memory-management
实际上malloc如何获得微控制器中可用的当前空闲存储空间.它是否保留了运行时中未连续分配的区域列表?如果代码中有两个malloc语句,它如何获取先前malloc赋值内存分配的信息
如何知道哪个内存是空闲的,哪个内存不在运行时.在编译时,我们可以知道编译器为变量分配RAM中的所有位置.malloc是否使用此信息执行此操作.
正如评论者上面所说,malloc 有多种实现,并且每种实现的算法可能有很大不同。这是一个广阔而复杂的领域,您应该阅读内存管理以全面了解该主题。
简而言之,所有 malloc 实现都由内核的内存管理方案支持。内核将整个系统内存视为固定大小(4k、8k 等)的页面,并且所有分配和释放都在页面上完成。所有内核实现都会存在一个内存管理子系统,它负责系统上发生的整个内存分配和释放的统计。当您调用 malloc 时,它最终将到达此内存管理子系统,并从池中查找下一个可用的空闲页面并为请求进程进行分配。在将页面提供给请求者之前,他将确保将其标记为已使用,并且以同样的方式,当您释放内存时,它会将其添加回空闲池并取消标记已使用。关于内核如何有效地完成所有这些工作,存在很多实现(阅读 Linux 中的内存管理器实现)
在常见的实现中,用户空间本身存在最小的内存管理器功能。用户空间进程本身维护一个空闲池,当 malloc 请求内存时,在闯入内核之前,它会在自己的空闲池中查找是否有可用内存。如果可用,它将对其进行标记并满足请求,而无需内核的帮助。同样,当您释放内存时,释放的内存块不会立即返回到内核的空闲池,而是保留在进程的空闲池中,以便下一个 malloc 可以使用它。
正如我在一开始所说的,这是一个巨大而复杂的主题,您可以在互联网上找到很多关于此的文档。