1

shmget() を使用して 22MB の共有メモリを割り当てようとしましたが、errno ENOMEM で終了します。top の出力の最初の行は、十分なメモリがあるかのように見えます。

Processes: 114 total, 4 running, 110 sleeping, 579 threads
Load Avg: 0.50, 0.42, 0.35  CPU usage: 0.24% user, 0.60% sys, 99.15% idle
SharedLibs: 17M resident, 5356K data, 0B linkedit.
MemRegions: 20375 total, 1361M resident, 59M private, 1176M shared.
PhysMem: 1487M wired, 1887M active, 576M inactive, 3950M used, 12G free.
VM: 286G vsize, 1052M framework vsize, 123007(0) pageins, 0(0) pageouts.

このプログラムは、OS X バージョン 10.8.5 で実行されます。何が原因でしょうか?

4

1 に答える 1

0

次の sysctl 変数は共有メモリに影響します: kern.sysv.shmmax、kern.sysv.shmmin、kern.sysv.shmmni、kern.sysv.shmseg、kern.sysv.shmall。ここで、kern.sysv.shmall は通常、kern.sysv.shmmax を 4096 で割った値に設定する必要があります。

于 2013-10-23T12:21:06.350 に答える