c - 在堆上分配小内存块?

标签 c memory memory-management

我现在正在学习一些 C 语言,并试图了解手动内存管理。

我知道堆栈(自动处理)和堆(不自动处理)。

要处理堆的内存分配,您可以使用 malloc 。 我听说有些人使用特定于平台的分配函数,例如 VirtualAllocHeapAlloc出于性能原因。

但是我读过VirtualAlloc应该仅用于一次分配大量内存。那么如何在堆上分配少量内存呢?首选平台特定功能,可实现最佳性能。

最佳答案

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

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

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

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

关于c - 在堆上分配小内存块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105819/

相关文章:

c - 使用其他数组对数组进行排序

c - 将前导零添加到整数不起作用(arduino,c)

ios - 关于 MKMapView 内存问题,应用程序异常崩溃

Java 接口(interface)...动态或静态内存?

c++ - 如何在 C++ 中删除这个二维数组

c - 具有可变成员大小的结构

c - c中单引号中两个字符的用法

azure - 如何在 Azure VMSS 中定义内存自动缩放规则

excel - "Out of Memory Error (Java)"使用 R 和 XLConnect 包时

android - malloc 和 dlmalloc 之间的区别