gpt4 book ai didi

c - 关于内存管理中函数arch_get_unmapped_area的一个问题(linux)

转载 作者:太空狗 更新时间:2023-10-29 11:20:30 24 4
gpt4 key购买 nike

在书http://www.ecsl.cs.sunysb.edu/elibrary/linux/mm/mm.pdf第202~203页

if (addr) {
addr = PAGE_ALIGN(addr);
vma = find_vma(current->mm, addr);
if (TASK_SIZE - len >= addr &&
(!vma || addr + len <= vma->vm_start))
return addr;
}

如果 addr 不为零,我们将其对齐到页面边界。我们调用函数find vma() 以查看给定地址是否包含在现有 VMA 中。如果它不包含在任何 VMA 中,映射的结尾在进程地址空间,我们返回地址。

我的问题是:
为什么我们检查 addr + len <= vma->vm_start?
addr + len <= vma->vm_start 怎么可能?如果在 vma 中找到地址,则地址 > vm_start,对吗?如果 len 是正数(应该是,对),那么 addr + len <= vma->vm_start 怎么可能?

最佳答案

看看find_vma源码里的注释就知道了:

/* 查找第一个满足addr < vm_end 的VMA,没有则为NULL。 */

因此,find_vma() 可能会返回一个实际上并未映射地址的 vma,因此会进行检查。

关于c - 关于内存管理中函数arch_get_unmapped_area的一个问题(linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643803/

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