【问题标题】:Shared memory segment shared between a 32 and 64 bit processes在 32 位和 64 位进程之间共享的共享内存段
【发布时间】:2014-10-31 09:44:19
【问题描述】:

是否可以创建一个 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

【问题讨论】:

    标签: c linux shared-memory


    【解决方案1】:

    人 shmget(2)

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

    【讨论】:

    • 我在我的 shmget 手册页中没有看到这个。也无法识别 IPC_SHARE32。我可以在一些 HP 文档中找到它。你能告诉我更多关于如何使用它的细节吗?
    • 我在您提供的链接中看不到 IPC_SHARE32
    • 它看起来也仅在 HP-Ux 中受支持,HP-Ux 是 HP 专有的 unix 实现
    【解决方案2】:

    来自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 位进程访问它,我不知道是什么行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-28
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多