gpt4 book ai didi

c - shmat() 返回的虚拟内存地址指向不同的硬件内存位置

转载 作者:太空狗 更新时间:2023-10-29 11:45:56 26 4
gpt4 key购买 nike

我有两个进程,每个进程都可以从 shmget() 获取相同的 shmid

在这两个过程中,shmat()给出了不同的内存地址。

每个进程的地址总是相同的:

Process1: 0x41b31000
Process2: 0x4017d000

我不认为地址是虚拟地址,如下面问题中所写的答案所述,此外,如果这些地址是虚拟地址,则它们必须指向相同的硬件地址。 但是,这些地址的内容并不相同。

我正在为 ARM 处理器进行交叉编译,我的程序在 x86 Debian Lenny 中运行时没有错误或问题。

我知道这个问题,但问题并没有那么容易 - shmat() is returning a different "shmaddr" for same "shmkey" -

最佳答案

shmat返回的地址是虚拟地址。

同一个物理内存在不同的进程中可能映射到不同的虚拟地址。 (同一物理内存甚至可以映射到一个进程内的不同虚拟地址;操作系统可以设置虚拟到物理的转换,以便多个虚拟地址映射到同一物理内存。)

如果 shmat 在进程 A 中返回地址 a 并且映射相同的共享内存段在进程中返回地址 b进程B,则进程Aa处的数据应该与进程中b中的数据相同B。如果不是,则有问题,这可能包括:您实际上没有映射同一个共享内存段,您没有正确比较数据,或者(不太可能)共享内存软件或操作系统。

关于c - shmat() 返回的虚拟内存地址指向不同的硬件内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15700246/

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