筆記:shmat 共享內存中,如果包含指針,指針數據出錯的原因

本文內容總結自網絡:

http://www.ixpub.net/thread-1446958-1-1.html

http://topic.csdn.net/u/20090428/10/79fd9da9-2e16-4a46-943a-9fb3dde2a183.html

 

1、共享內存中用指針一般是用對首地址的偏移量,這樣就好了,每個進程映射的地址不一樣

 

2、交換用的數據中,永遠都不要出現指針。
    什麼是交換用的數據?
    磁盤文件、網絡封包、共享內存、消息隊列、管道,等等等等。

 

3、可以使用,但是那個指針指向的內存也必須是在那部分共享內存中的

 

4、共享內存裏的數據結構成員不要用指針,要用偏移量,shmat得到的地址不能保證一樣的

 

本人總結:

    共享內存中不要出現指向共享內存外的指針,即使是指向共享內存中的指針也不要出現,因爲共享內存中的指針值是對首地址哦偏移,不同程序將該段共享內存映射到本程序時,共享內存地址可能不一樣,從而造成相對首地址偏移不一樣,最終導致指針指向的地址不一樣。

   所以,在共享內存使用指向共享內存的指針時,使用偏移量來代替(相對共享內存首地址的偏移量);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章