gpt4 book ai didi

c - "shmget"系统调用中可以使用的最大大小是多少? (获取共享内存)

转载 作者:行者123 更新时间:2023-11-30 18:37:18 27 4
gpt4 key购买 nike

我正在编写一个简单的程序来分配共享内存,下面是shmget的示例代码,

#define SHM_SIZE 1024

main(int argc,char **argv)
{
int shmId,choice;
key_t key=8888;
char *shmPtr;
size_t memSize;

shmId=shmget(key, SHM_SIZE, IPC_CREAT | 0777);
if(shmId == -1)
{
perror("shmget");
exit(1);
}

以上代码运行正常,没有任何错误,

现在,当我将 SHM_SIZE 更改为 1024*1024*1024然后我在 shmget

中收到错误
Error : 
shmget: Invalid argument

谁能帮忙解释一下这是为什么吗?

我分配的数量是否超过最大值?

最佳答案

将评论编译为答案。 shmget man page描述了 EINVAL 错误的可能原因:

A new segment was to be created and size < SHMMIN or size > SHMMAX, or no new segment was to be created, a segment with given key existed, but size is greater than the size of that segment.

由于您的系统配置的 SHMMAX 大于请求的大小,因此错误必定是由第二个原因造成的。这可能是因为您首先运行较小大小的程序而发生的。由于共享内存在创建共享内存的进程退出时不会自动删除,因此当程序以更大的大小再次运行时,共享内存仍然存在。正如错误描述中所述,不允许在更大大小的现有共享内存区域上调用 shmget

关于c - "shmget"系统调用中可以使用的最大大小是多少? (获取共享内存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650541/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com