共享内存段在32位和64位进程之间共享

时间:2014-10-31 09:44:20

标签: c linux shared-memory

是否可以创建可由32位和64位进程访问的共享内存段。支持64位寻址的标志'TPF_IPC64'如下所示

shmget(key,100,IPC_CREAT|TPF_IPC64);

是否可以从32位Linux进程访问它?

编辑:看起来普通的Linux操作系统调用shmget不支持标志'TPF_IPC64'。我认为这是IBM专有的(我的坏)。我从这个链接中获取了它

http://pic.dhe.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=%2Fcom.ibm.ztpf-ztpfdf.doc_put.cur%2Fgtpc2%2Fcpp_shmget.html

2 个答案:

答案 0 :(得分:3)

man shmget(2)

  

如果在shmflg中设置了IPC_CREAT,则可以创建共享内存段   仅由相同可执行类型的进程共享。那是一个   编译为32位进程的应用程序将能够共享   与其他32位进程和应用程序相同的内存段   编译为64位进程将能够共享相同的内存   与其他64位进程分段。如果是64位进程想要的话   创建一个共享内存段,也可以与32位共享   在进程中,64位进程必须另外指定IPC_SHARE32   shmflg中的IPC_CREAT。 32位进程不需要指定   IPC_SHARE32。基于Itanium(R)的平台,如果是自适应地址   正在使用空间功能,然后可能会应用其他规则。见   关于自适应地址空间的以下部分。

答案 1 :(得分:0)

来自IBM's文件

TPF_IPC64 Specifies that 64-bit addressing is supported. If you specify this flag, 64-bit system heap is used to satisfy the request if there is enough heap available. If there is no 64-bit system heap space available, 31-bit system heap will be used. Specify this flag only if all the users of this shared memory area can support 64-bit addresses.

最后一句话提到所有进程都必须支持64位地址。因此,使用32位地址的进程无法访问它。

但是,如果您尝试使用32位进程访问它,我不会采取什么行为。