在堆上分配很少的内存?

时间:2016-05-08 23:16:59

标签: c memory memory-management

我现在正在学习一些C,我知道有一个堆栈会被自动处理,然后就会有堆不会自动处理的堆。 要处理堆的内存分配,您可以使用malloc,或者如果您想要更具体的VirtualAlloc或HeapAlloc。

但是我读到VirtualAlloc用于分配大量内存。那么有没有办法在堆上分配很少的内存?

2 个答案:

答案 0 :(得分:2)

除非您有特殊要求,否则只需使用malloc(在C中)或new(在C ++中)。由于它们通常被实现,它们将使用高效的数据结构来跟踪并向您提供中小型内存块,通常将大块的分配委托给操作系统。

答案 1 :(得分:2)

堆和堆栈只是以不同方式管理的内存。实际上,您可以拥有多个堆栈和多个堆栈。堆必须由库管理。

在系统级别,内存分配给页面中的进程。系统服务可以定义页面到磁盘的映射以及页面的保护。 VirtualAlloc就是这样的系统服务(或者是一个包装器)。

堆管理器从操作系统分配页面以创建和扩展堆,然后管理堆中的较小分配。 HeapAlloc和malloc是堆管理器使用的函数。

除非你需要分配大块内存,否则你应该使用malloc。