gpt4 book ai didi

linux - 如果下一个请求适合 mmap 是否使用已分配的 block ?

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:27 24 4
gpt4 key购买 nike

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

malloc(1000);
malloc(1000);
malloc(1000);

和我的ma​​lloc实现使用mmap()。所以我想知道:-

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

最佳答案

Linux(即 GNU libc)malloc 的映射行为在联机帮助页 mallopt(3) 中进行了描述。 malloc 使用“动态 mmap 阈值”,从 128kB 开始,但这可以根据进程的分配模式自动向上调整。使用老式空闲列表提供较小的分配,并且可以使用环境变量或 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

关于linux - 如果下一个请求适合 mmap 是否使用已分配的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20947749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com