当前位置:  技术问答>linux和unix

shmat(shmid,NULL,0)) shmid相同的话,每次成功调用返回地址是一样,还是不确定

    来源: 互联网  发布时间:2016-05-12

    本文导语:  主函数创建两个子进程,每个子进程都有addr = shmat(shmid,NULL,0))  //其中shmid相同 可我发现两个子进程的addr都是一样的,是碰巧还是什么? shmat(shmid,NULL,0))  shmid相同的话,每次成功调用返回地址是一样,还是不确...

主函数创建两个子进程,每个子进程都有addr = shmat(shmid,NULL,0))  //其中shmid相同
可我发现两个子进程的addr都是一样的,是碰巧还是什么?


shmat(shmid,NULL,0))  shmid相同的话,每次成功调用返回地址是一样,还是不确定?

|
不一定相同,相同只是偶然现象。
内核为程序分配一块共享内存,这时的地址还是内核地址,需要影射到进程的地址空间,影射过程中,从高地址忘下查找,直到找到空闲,就使这个地址对应那段共享内存空间。

|
刚想了一下,这样测估计还是一样的,堆内存跟共享内存用的不是同一块地方

可以这样测试:其中一个子进程先申请一点共享内存,shmid为其他的什么值,反正与接下来的shmid不一样就可以了,然后再调用shmat(shmid,NULL,0)),这个时候返回的地址应该就跟另外一个子进程不一样

共享内存使用的是内存结构中的文件映射区
具体的内存分布,可以看一下这篇文章:http://blog.csdn.net/eroswang/archive/2007/04/02/1549110.aspx

|
应该是不确定的...
楼主可以测试一下,在其中一个子进程里增加一个逻辑,申请一点点堆内存,然后再调用shmat(shmid,NULL,0)) 
两个子进程返回的应该就不一样了。。。test it

|
申请分配的共享内存地址空间是固定的。

两个子进程使用的时候用的是同一个共享内存,而且你指定了由系统返回
共享内存的地址,所以返回的地址是一样的

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下共享内存 函数shmat()的使用!
  • 64位Linux shmat返回值被截断
  • linux下共享内存shmat失败
  • linux shmat问题
  • shmat作用
  • 关于linux shmat 地址奇怪问题,请熟悉共享内存的高手指点一下


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3