免费注册 查看新帖 |

Chinaunix

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

奇异问题紧急求助----redhat linux的共享内存和内存映射问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-28 17:40 |只看该作者 |倒序浏览
我在redhat linux下做了一个程序,使用了共享内存ipc,在shmat()函数中发现在不同进程里面对于同样的key的返回的共享内存地址不一样。(为什么会不一样呢,难道返回的都是各进程的空间地址?)

例如:
对于进程A,获得的共享内存地址pABuf为0xeeeeee,pABuf应该为进程A的空间地址
对于进程B获得的共享内存地址pBBuf为0xccccccc,pBBuf应该为进程B的空间地址


对于某一个结构
struct ladeng
{
    int a;
    int b;
    void* p;
    void** pp;
}

假如用ladeng结构去初始化pABuf,其中p和pp都是指向pABuf中的某个位置。

然后再用ladeng结构从B进程获取的pBBuf获得共享内存内容,因为key相同的。利用(ladeng*)pBBuf获得的内容应该和(ladeng*)pABuf一样。


这样获得内容应该只有整数等非指针类型是一样的,但是指针的也是一样。

问题就是出现在这里,
对于指针指向的地址是应该是不一样,因为假设pABuf和pBBuf是各自进程空间地址,它们必须要还要把指针映射到自己的进程地址,否则那些地址对于其他进程来说是不可以访问的(我测试过程中也发现了)


我想知道为什么不同进程用相同的key使用shmat会返回不同地址,既然可以返回不同地址,为什么指针不能映射到自己进程空间。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-04-28 18:51 |只看该作者

奇异问题紧急求助----redhat linux的共享内存和内存映射问题

人家又没说非得一样。
系统内部是如何实现的,各个系统应该都不一样的吧?
我不知道你研究这个的目地是什么。

论坛徽章:
0
3 [报告]
发表于 2004-04-29 08:41 |只看该作者

奇异问题紧急求助----redhat linux的共享内存和内存映射问题

原帖由 "flw" 发表:
人家又没说非得一样。
系统内部是如何实现的,各个系统应该都不一样的吧?
我不知道你研究这个的目地是什么。




对,可以不一样的,但是如果不一样进行内存映射的应该对所有类型进行映射,而不不是只对非指针类型映射。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP