C语言 是否在堆上分配小内存块?[已关闭]

jexiocij  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(163)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

六年前关闭了。
这篇文章是4天前编辑并提交审查的。
Improve this question
我现在正在学习一些C语言,并试图理解手动内存管理。
我知道堆栈(它是自动处理的)和堆(它不是自动处理的)。
要处理堆的内存分配,可以使用malloc,我听说有些人出于性能原因使用特定于平台的分配函数,如VirtualAllocHeapAlloc
但是我读到VirtualAlloc应该只用于一次性分配大量内存。那么我如何在堆上分配少量内存呢?首选特定于平台的函数以获得最大性能。

rqqzpn5f

rqqzpn5f1#

堆和栈只是用不同方式管理的内存。事实上,你可以有多个堆和多个栈。一个堆必须由一个库管理。
在系统级,内存以页的形式分配给进程。系统服务可以定义页到磁盘的Map和对页的保护。VirtualAlloc就是这样一种系统服务(或 Package 器)。
堆管理器从操作系统中分配页面来创建和扩展堆,然后管理堆中较小的分配。HeapAlloc和malloc是堆管理器使用的函数。
除非需要分配大的内存块,否则应该使用malloc。

esbemjvw

esbemjvw2#

除非你有特殊的要求,使用malloc(C)或new(C++)就可以了,因为它们通常都是用高效的数据结构来跟踪并提供给你小到中等的内存块,通常会委托操作系统来分配大的内存块。

相关问题