我现在正在学习一些 C 语言,并试图了解手动内存管理。
我知道堆栈(自动处理)和堆(不自动处理)。
要处理堆的内存分配,您可以使用 malloc
。
我听说有些人使用特定于平台的分配函数,例如 VirtualAlloc
或HeapAlloc
出于性能原因。
但是我读过VirtualAlloc
应该仅用于一次分配大量内存。那么如何在堆上分配少量内存呢?首选平台特定功能,可实现最佳性能。
最佳答案
堆和栈只是以不同方式管理的内存。事实上,您可以拥有多个堆和多个堆栈。堆必须由库管理。
在系统级别,内存以页为单位分配给进程。系统服务可以定义页面到磁盘的映射以及对页面的保护。 VirtualAlloc 就是这样一种系统服务(或一个包装器)。
堆管理器从操作系统分配页面来创建和扩展堆,然后管理堆内较小的分配。 HeapAlloc 和 malloc 是堆管理器使用的函数。
除非需要分配大块内存,否则应该使用 malloc。
关于c - 在堆上分配小内存块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105819/