gpt4 book ai didi

linux - 内核如何给出段。这样的场景有错吗?

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

我对访问一些无效数据有疑问。对于这样的场景,操作系统如何导致段错误:

假设一个数据 block 有 100 个字节长,在一个 4K 页面的开头对齐。如果我们访问页面前 100 个字节内的有效数据,这会将页面加载到内存中,并将页表条目放入 TLB 中。如果我们现在尝试访问 100 到 4K 之间的一些无效数据,因为该条目已经存在于页表中,是否允许我们访问无效数据?

最佳答案

没错。但通常您不会直接从操作中分配内存。您通常通过一些库函数(newmalloc 等)分配它。库函数将占用 4KB(通常它也会在一个 block 中分配超过 4KB)并将其拆分为您要求的实际 block 。因此,通常当您请求 100 字节的内存时,这 100 字节将“楔入”您所做的其他两个分配请求之间。

这就是为什么当您访问数组末尾的数据时它是“未定义的行为”:您可能遇到段错误,您可能丢弃一些其他变量恰好存储在那里,或者您可能没问题并且它确实有效(至少有一段时间)。

关于linux - 内核如何给出段。这样的场景有错吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2815397/

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