代码之家  ›  专栏  ›  技术社区  ›  Ash

在OSX上用C管理共享内存

  •  3
  • Ash  · 技术社区  · 14 年前

    我正在做一份大学作业,主要基于工控机和共享记忆。问题是,作为C的一个完整的noob,我已经很高兴地测试了我的应用程序(它使用 shmget shmat 显然)几个小时。正如你可能猜到的,我没有在清理自己,现在我不能运行我的应用程序,因为(我想) 共享存储区 无法分配更多资源。

    我的问题是:我如何在不重新启动OSX的情况下取回这个资源,以及是否有一个GUI工具或一些我可以用来监视/管理我正在创建的共享内存的东西?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Fred Foo    14 年前

    呼叫 shmdt 在保存对共享内存段引用的每个进程中,共享内存段上的(“共享内存分离”)。Unix共享内存段被引用计数,因此当最后一个进程从中分离时,可以使用 shmctl(id, IPC_RMID, NULL) .

    从应用程序外部,我现在唯一能想到的清除共享内存段的方法是:

    for (int id=0; id < INT_MAX; id++)
        shmctl(id, IPC_RMID, NULL);
    

    但这是一个非常低效的拼凑。(我也不确定它是否有效;它不在Linux上,但Linux违反了Unix标准,而MacOS X则通过了相应的认证。)

        2
  •  3
  •   wouter    13 年前

    也许有点晚了,但是有一些命令行工具可以做到这一点。 IPCS与IPCRM

    看看他们的主页。