使用以下参数调用:
shmget(IPC_PRIVATE,sizeof(int),0600);
我正在尝试确定将多少字节分配给共享内存块?
我认为它与PAGE_SIZE有关(默认情况下在32位操作系统上是4k [4096]?)。
答案 0 :(得分:0)
来自man shmget(2)
:
shmget()
返回System V共享内存的标识符 分割 与参数键的值相关联。一个新的共享内存 段,大小等于大小的值四舍五入到倍数 如果密钥具有值PAGE_SIZE
或密钥不是{t},则创建IPC_PRIVATE
IPC_PRIVATE
,不存在与密钥对应的共享内存段,以及IPC_CREAT
中指定了shmflg
。
因此,在您的情况下,舍入sizeof(int)
(可能等于4
)会分配一个页面大小,是的。
答案 1 :(得分:0)
From(特定于Linux)man shmget
:
编译内核时定义了如果密钥的值为
IPC_PRIVATE
或密钥不是IPC_PRIVATE
,则会创建一个新的共享内存段,其大小等于向上舍入为PAGE_SIZE的倍数的大小值。没有与密钥对应的共享内存段,并且在shmflg中指定了IPC_CREAT
。
PAGE_SIZE
,而在x86上通常是4 KiB。当程序运行时,使用sysconf(_SC_PAGESIZE)
(或getpagesize()
当可移植性不成问题时)以字节为单位获取正确的值。
但是,即使分配实际上更大,也不应使用超过请求的共享内存大小,因为POSIX允许实现分配精确大小的内存,因此这种行为可能会在以后的版本中发生变化。