gpt4 book ai didi

c - Linux进程虚拟地址空间的地址范围

转载 作者:行者123 更新时间:2023-11-30 17:17:24 29 4
gpt4 key购买 nike

我使用的是 32 位机器。据我了解,用户空间的地址范围从 0x000000000xbfffffff,内核的范围从 0xc00000000xffffffff

但是当我使用 pmap 查看进程的内存分配时,我发现该库加载在 0xf7777777 左右。请参阅随附的屏幕截图。这是否意味着这些库已加载到内核空间中?当我使用mmap()时,我从0xe0000000获得了地址。那么,mmap()从内核空间获取了内存?

enter image description here

最佳答案

I'm on 32bit machine. From what I understand, User space's address ranges from 0x00000000 to 0xbfffffff, and kernel's ranges from 0xc0000000 to 0xffffffff.

不完全是。内核内存空间从 0xC0000000 开始,但不必填满整个 GB。事实上,它填充到虚拟地址0xF7FFFFFF。这涵盖 896MB 物理内存。虚拟地址 0xF8000000 及以上用作内核的 128MB 窗口,以映射超出 896MB 限制的任何物理内存区域。

所有用户进程共享相同的虚拟地址内存映射 0xC0000000 及以上,因此如果内核不使用其整个 GB 的虚拟空间,它可能会重用其中的一部分来映射常用的共享空间库,因此每个进程都可以看到它们。

关于c - Linux进程虚拟地址空间的地址范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426476/

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