免费注册 查看新帖 |

Chinaunix

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

[SCO UNIX] 请问一个共享内存地址挂接的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-17 16:48 |只看该作者 |倒序浏览
用shmat(int shmid, void *shmaddr, int shmflag)
1.请问shmaddr 为0时,系统会降这些存储端设在一个连续的地址空间中吗?
  如果不,那怎样才能获得一段连续的地址空间呢?
2.在shmet()中分配段内存的大小的最大值是不是1048576字节,可以该大一点吗?从哪里该呢?
3。谢谢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-09-17 19:28 |只看该作者

请问一个共享内存地址挂接的问题

1、shmaddr 为0时, 系统会把共享内存段attach到第1个可用的地址,这个可用的地址已经考虑了你共享内存的size当然是连续的,否则你怎么使用呢?

2、shmget的size最大值理论上 = 系统内核参数SHMMAX - 已经用掉的共享内存,
考虑到内存连续性的要求,实际可用的值还要小

论坛徽章:
0
3 [报告]
发表于 2004-09-18 10:48 |只看该作者

请问一个共享内存地址挂接的问题

谢谢,
现在正用共享内存开发,以前没有用过,这次出现了一个问题,就是第一次调用的时候没有问题,第二次引用时出现了coredown(这种一般是什么原因造成的呢?)
我的思路是这样的:
1。先开辟一块内存段(shmget)
2。接着在该块里分配很多个段(其实是一个连续的内存,分成很多个段来使用,而且每个段里存放的数据都不一样)譬如 我分配了1024字节的一块内存 ,其首地址为a1, ,前100个字节放一种结构,剩下的放另外一个结构  第二段的首地址可不可以认为是 a1+100  ,注意第一个段存放的结构里有整型、字符、长整型等等

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-09-18 11:13 |只看该作者

请问一个共享内存地址挂接的问题

结构在内存中存在成员边界对齐问题,所以大小不一定是100字节,你可以使用
a1+sizeof(struct 结构名)来定位;
读取共享内存中的结构可以使用指针强制类型转换,如:
char *a2 = a1 + sizeof(struct stru1);
struct stru2 *stru2_p = (struct stru2 *)a2;

共享内存每次引用完要立即shmdt解除挂接,再次使用时再挂接上,否则会影响并发操作的效率

论坛徽章:
0
5 [报告]
发表于 2004-09-18 11:42 |只看该作者

请问一个共享内存地址挂接的问题

谢谢!!!  谢谢!! 谢谢
可能是成员边界对齐问题造成的,我再看看

论坛徽章:
0
6 [报告]
发表于 2004-09-22 09:13 |只看该作者

请问一个共享内存地址挂接的问题

现在有一个奇怪的问题:我shmet() 了 104817500个字节, 但给该块内存分配 2个子段 (都是20480字节),当有其中一个大于20480时,譬如204800 就会出现coredump,一般是什么造成的呢?
我是先获取 shmat获取首地址  ,接着就按照地址偏移来获得第二个段的首地址 ,当写第二个段数据时就出现coredump

论坛徽章:
0
7 [报告]
发表于 2004-09-22 11:46 |只看该作者

请问一个共享内存地址挂接的问题

To CNL      光明使者:
你有没有碰到过?  这种情况可能是什么造成的呢?

论坛徽章:
0
8 [报告]
发表于 2004-09-22 11:51 |只看该作者

请问一个共享内存地址挂接的问题

coredump 应该怎么看啊,从里面我能获得什么关键信息呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-09-22 11:53 |只看该作者

请问一个共享内存地址挂接的问题

呵呵,我没有碰倒这种问题,
不过对于大内存需求,我建议你把它们划成小块分别shmget申请,
否则存取速度及效率都会很差,
因为操作系统需要不停地合并小内存帮你维持内存连续,代价太高了,
如果有数据库,如oracle,ipcs -o看一下有很多吧,很少有你这样一次搞这么巨大的用法

论坛徽章:
0
10 [报告]
发表于 2004-09-22 12:01 |只看该作者

请问一个共享内存地址挂接的问题

因为我存放的一个结构就很大(我开发的是一个银行8583包)里面声明了一个结构的大小就有:1600字节左右
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP