如果下一个请求适合它,是否 mmap 使用已分配的块



>假设我想像这样分配 3000 字节

马洛克(1000);
马洛克(1000);
马洛克(1000);

我的 malloc 实现使用 mmap() .所以我想知道:-

  1. 是 malloc 调用 3 次 mmap()。
  2. 是 mmap 分配 3 个单独的页面(总分配内存为 3*4096
  3. ),还是从一个页面为所有三个请求者提供内存(总分配内存为 4096)。
  4. 如果它分配了三个不同的页面,那么我如何让我的分配只用一页来完成。

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

相关内容

  • 没有找到相关文章

最新更新