shmget系统调用[Linux] - 分配的字节数?

时间:2015-02-08 13:20:10

标签: c linux shared-memory system-calls

使用以下参数调用:

shmget(IPC_PRIVATE,sizeof(int),0600);

我正在尝试确定将多少字节分配给共享内存块?

我认为它与PAGE_SIZE有关(默认情况下在32位操作系统上是4k [4096]?)。

2 个答案:

答案 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允许实现分配精确大小的内存,因此这种行为可能会在以后的版本中发生变化。