笔记:shmat 共享内存中,如果包含指针,指针数据出错的原因
2011-05-20 11:43
465 查看
本文内容总结自网络:
(
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得到的地址不能保证一样的
本人总结:
共享内存中不要出现指向共享内存外的指针,即使是指向共享内存中的指针也不要出现,因为共享内存中的指针值是对首地址哦偏移,不同程序将该段共享内存映射到本程序时,共享内存地址可能不一样,从而造成相对首地址偏移不一样,最终导致指针指向的地址不一样。
所以,在共享内存使用指向共享内存的指针时,使用偏移量来代替(相对共享内存首地址的偏移量);
(
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得到的地址不能保证一样的
本人总结:
共享内存中不要出现指向共享内存外的指针,即使是指向共享内存中的指针也不要出现,因为共享内存中的指针值是对首地址哦偏移,不同程序将该段共享内存映射到本程序时,共享内存地址可能不一样,从而造成相对首地址偏移不一样,最终导致指针指向的地址不一样。
所以,在共享内存使用指向共享内存的指针时,使用偏移量来代替(相对共享内存首地址的偏移量);
相关文章推荐
- 笔记:shmat 共享内存中,如果包含指针,指针数据出错的原因
- C++学习笔记2--函数重载 复杂的数据 内存对齐 指针数组 结构与指针 传值传址传引用 联合枚举类型别名
- go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针
- C++虚拟继承中_对象内存的分布_虚继承会多余分配虚表v-tab的指针vptr_图1-1清楚的描述了虚继承类对象内存的分布_转载淘宝共享数据平台
- windows笔记-使用内存映射文件在进程之间共享数据
- windows笔记-使用内存映射文件在进程之间共享数据
- C++学习笔记之线程:数据共享与竞争,线程死锁
- fread返回0或者不是期望的值,那么是否会读取到数据(如果数据没有读完的话),并改变了文件的指针位置?
- 【Android新手笔记四】activity之间的数据共享
- PostgreSQL启动过程中的那些事十六:启动进程三:CheckPointGuts刷出共享内存里所有数据
- 共享内存实现进程间大数据的交换
- linux笔记之共享内存
- windows笔记-在可执行文件或DLL的多个实例之间共享静态数据
- 使用内存映射文件在进程间共享数据
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- Android SharePreference 在主进程和次进程间共享数据不同步出错
- C/C++中关于地址、指针和引用变量的学习笔记(九) : 内存结构
- Linux进程间通信(七)---共享内存之shmget()、shmat()、shmdt()及其基础实验
- 关于内存和指针操作,数据类型转换本质的理解
- 【EF学习笔记05】----------操作内存中的数据