gpt4 book ai didi

c - malloc是否只分配线性区域结构vm_area_t中的空间而不是实际内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:37 25 4
gpt4 key购买 nike

我在《Understanding the linux kernel》中看到,当在用户空间调用malloc时,内核只是在vm_area_t结构中增加一个线性区域,而不是在内存中分配空间,这被称为推迟分配,而这个空间分配在线性区域中的只能在页面中断发生时使用。但是如果在页面中断期间不能分配页面,那么调用malloc时用户不是被骗了吗?

最佳答案

glibc 包装的 malloc() 调用将首先从 glibc 维护的堆内存中分配。 (参见 what happens in the kernel during malloc?)如果 glibc 用完堆内存,则调用 sys_brk 分配更多内存。内核仅在首次接触分配内存(主要是页面错误处理程序)时才将内存分配给用户请求。因此,我猜 calloc 将返回一个真正分配的页面,因为它将页面初始化为零(来自手册页),它通过删除页面内容来触及页面。如果无法在故障处理程序中分配新页面,则意味着系统内存非常低,要么处于大量交换中,要么即将 OOM。

一件小事是,Linux 在分配给用户进程时总是清理内存,因为当页面返回给伙伴分配器时它不会这样做。

关于c - malloc是否只分配线性区域结构vm_area_t中的空间而不是实际内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10831232/

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