免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3375 | 回复: 4
打印 上一主题 下一主题

[C] shmget开辟共享内存当物理内存不足时为什么不返回? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-06 12:42 |只看该作者 |倒序浏览
编程时发现一个奇怪的问题:
Linux开辟共享内存,当剩余的内存比要开辟的共享内存字节数小时,函数会阻塞在那儿,如下:
j = shmget(IPC_PRIVATE, shmsize, IPC_CREAT | 0644);
linux没有分配swap分区,用top查看剩余内存大小,然后用上述函数分配共享内存,当shmsize比剩余内存大时,程序会一直阻塞在这里,得不到j,不知道为什么?查看shmget函数的说明,如果分配失败是应该返回-1的,为什么不返回-1而是阻塞在此,请高手赐教!!!

论坛徽章:
0
2 [报告]
发表于 2008-08-14 09:28 |只看该作者

回复 #1 phyhust 的帖子

能解释一下他的意思吗:IPC_CREAT | 0644

论坛徽章:
0
3 [报告]
发表于 2008-08-14 09:34 |只看该作者
IPC_CREAT | 0644是给IPC_CREAT 分配内存

论坛徽章:
0
4 [报告]
发表于 2008-08-14 10:03 |只看该作者
top看到的不是实际可用内存,因为内存很大一部分被用作cache了,当有程序申请内存的时候,这一部分会释放

论坛徽章:
0
5 [报告]
发表于 2008-08-14 10:36 |只看该作者
会不会是楼主使用默认的共享内存KEY和其他的冲突了,用自己定义的KEY试试看
m_iShmKey = ftok(m_pCombRule->strShmPath,0);
m_iShmID=shmget(m_iShmKey,MAX_MEM_SIZE*sizeof(char),PERM|IPC_CREAT);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP