shmget返回ENOMEM,12GB免费

时间:2013-10-14 15:09:00

标签: macos memory system errno enomem

我尝试使用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下运行。知道原因可能是什么吗?

1 个答案:

答案 0 :(得分:0)

以下sysctl变量影响共享内存:kern.sysv.shmmax,kern.sysv.shmmin,kern.sysv.shmmni,kern.sysv.shmseg,kern.sysv.shmall。这里kern.sysv.shmall通常应该设置为租约kern.sysv.shmmax除以4096.