我现在正在学习一些C,我知道有一个堆栈会被自动处理,然后就会有堆不会自动处理的堆。 要处理堆的内存分配,您可以使用malloc,或者如果您想要更具体的VirtualAlloc或HeapAlloc。
但是我读到VirtualAlloc用于分配大量内存。那么有没有办法在堆上分配很少的内存?
答案 0 :(得分:2)
除非您有特殊要求,否则只需使用malloc
(在C中)或new
(在C ++中)。由于它们通常被实现,它们将使用高效的数据结构来跟踪并向您提供中小型内存块,通常将大块的分配委托给操作系统。
答案 1 :(得分:2)
堆和堆栈只是以不同方式管理的内存。实际上,您可以拥有多个堆栈和多个堆栈。堆必须由库管理。
在系统级别,内存分配给页面中的进程。系统服务可以定义页面到磁盘的映射以及页面的保护。 VirtualAlloc就是这样的系统服务(或者是一个包装器)。
堆管理器从操作系统分配页面以创建和扩展堆,然后管理堆中的较小分配。 HeapAlloc和malloc是堆管理器使用的函数。
除非你需要分配大块内存,否则你应该使用malloc。