假设我想像这样分配3000个字节
的malloc(1000);
的malloc(1000);
的malloc(1000);
我的 malloc实现使用 mmap()。 所以我想知道: -
答案 0 :(得分:1)
联机帮助页malloc
中描述了Linux(即GNU libc)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