>假设我想像这样分配 3000 字节
马洛克(1000);
马洛克(1000);
马洛克(1000);
我的 malloc 实现使用 mmap() .所以我想知道:-
- 是 malloc 调用 3 次 mmap()。 是 mmap 分配 3 个单独的页面(总分配内存为 3*4096
- ),还是从一个页面为所有三个请求者提供内存(总分配内存为 4096)。
- 如果它分配了三个不同的页面,那么我如何让我的分配只用一页来完成。
Linux(即GNU libc)malloc
的mmap行为在手册页mallopt(3)
中描述。 malloc
使用从 128kB 开始的"动态mmap
阈值",但可以根据进程的分配模式自动向上调整。较小的分配使用老式的免费列表提供,并且可以使用环境变量或mallopt
函数设置初始阈值。
因此,malloc
几乎肯定不会mmap
三个 4kB 页面,但不能保证它是否将分配保留在单个页面中。您可以执行手动mmap
,或者,如果两个页面没问题,则执行单个malloc
:
char *a = malloc(3000);
// check for errors
char *b = a + 1000;
char *c = b + 1000;
// don't forget that you must free a, and only a, to free b and c