C++不同进程间的指针的传递问题

CodeBeing 2010-11-16 06:12:29
我想把一个进程里的一个对象的指针传给其他的进程来共享资源,我已经int iptr=(int)ptr并成功的把iptr的值传给了另外的进程B,可是在B中调用iptr的指针指向的资源时出错,这是为啥啊?怎么才能成功?
...全文
1126 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
cswuyg 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lishuai369 的回复:]
引用 18 楼 baladin 的回复:

引用 17 楼 wuxupeng999 的回复:

引用 15 楼 lishuai369 的回复:
boost库里面有boost.interprocess里面有,我就是用的这个共享库,不过我想试一下传指针,这样更快罢了,我操作系统没学,所以犯错误了,嘻嘻。不过我到是想知道楼上说的“.用系统的进程操作函数来读写另一个进程的虚地址”这个怎么弄!!!……
[/Quote]
我没用过boost。所以不是很清楚。
如果memory shared是通过内存映射文件实现的。那么obj1不会被销毁。
系统会为内存映射文件对象设置计数器。计数为0时内存映射对象才释放。
~~
具体,你自己测试一下。
CodeBeing 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 baladin 的回复:]

引用 17 楼 wuxupeng999 的回复:

引用 15 楼 lishuai369 的回复:
boost库里面有boost.interprocess里面有,我就是用的这个共享库,不过我想试一下传指针,这样更快罢了,我操作系统没学,所以犯错误了,嘻嘻。不过我到是想知道楼上说的“.用系统的进程操作函数来读写另一个进程的虚地址”这个怎么弄!!!3Q

先用VirtualAllocEX在……
[/Quote]
感谢“烛秋”
现在偶还有些疑惑,因为偶不是学计算机专业的,偶只会C++(自学4年了,算是个程序爱好者)。我有些关于C++滴底层的和操作系统方面的关于“内存分配”问题需要各位学计算机专业人士来帮我补补课,还望各位不吝赐教啊,在下有礼了!!
boost.interprocess里面可以把一个vector、map等数据结构allocate到shared memory,只需要在构造是使用shared memory提供的allocator即可boost 为stl提供了合适的allocator。但是偶想问一下shared memory里面的东西是生命周期是这样的,就是:如果A进程在shared memory建立了obj1,B进程一直在用obj1,这时A进程退出了obj1会不会被毁了--就是shared memory里面的东西的所有权问题吧。
qq373999217 2010-11-18
  • 打赏
  • 举报
回复
学习学习。。。

长见识了
Longerandlonger 2010-11-18
  • 打赏
  • 举报
回复
mark,学习,学习,进程间通信,共享内存
baladin 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wuxupeng999 的回复:]

引用 15 楼 lishuai369 的回复:
boost库里面有boost.interprocess里面有,我就是用的这个共享库,不过我想试一下传指针,这样更快罢了,我操作系统没学,所以犯错误了,嘻嘻。不过我到是想知道楼上说的“.用系统的进程操作函数来读写另一个进程的虚地址”这个怎么弄!!!3Q

先用VirtualAllocEX在进程A中申请到进程B的地址空间(这个是关键,得到地址),……
[/Quote]

Mark..zzzzzz
cswuyg 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lishuai369 的回复:]
boost库里面有boost.interprocess里面有,我就是用的这个共享库,不过我想试一下传指针,这样更快罢了,我操作系统没学,所以犯错误了,嘻嘻。不过我到是想知道楼上说的“.用系统的进程操作函数来读写另一个进程的虚地址”这个怎么弄!!!3Q
[/Quote]
先用VirtualAllocEX在进程A中申请到进程B的地址空间(这个是关键,得到地址),然后在进程A中用WriteProcessMemory/ReadProcessMemory可以进行写读
dingshaofengbinbin 2010-11-18
  • 打赏
  • 举报
回复 1
你虽然传递过去了,但是那个内存不属于B的地址空间,当然不能访问了!!要用共享吧!!
CodeBeing 2010-11-18
  • 打赏
  • 举报
回复
boost库里面有boost.interprocess里面有,我就是用的这个共享库,不过我想试一下传指针,这样更快罢了,我操作系统没学,所以犯错误了,嘻嘻。不过我到是想知道楼上说的“.用系统的进程操作函数来读写另一个进程的虚地址”这个怎么弄!!!3Q
wjb_yd 2010-11-18
  • 打赏
  • 举报
回复
google IPC
window下每个进程的虚拟地址空间是独立的。
redleaves 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lishuai369 的回复:]

引用 3 楼 redleaves 的回复:

具体原因1楼说了.

解决方案:
1.使用共享内存.这样可以通用OS的帮助,得到同一块物理地址在不同进程里的虚地址...达到共享读写的目的.
2.用系统的进程操作函数来读写另一个进程的虚地址.

"用系统的进程操作函数来读写另一个进程的虚地址"给个例子好吗?3Q
[/Quote]
请参考WIN32的WriteProcessMemory/ReadProcessMemory的帮助
  • 打赏
  • 举报
回复
[Quote=引用楼主 lishuai369 的回复:]
我想把一个进程里的一个对象的指针传给其他的进程来共享资源,我已经int iptr=(int)ptr并成功的把iptr的值传给了另外的进程B,可是在B中调用iptr的指针指向的资源时出错,这是为啥啊?怎么才能成功?
[/Quote]


进程间的虚拟地址是独立映射的,所以,介绍你用共享内存。

顺便搜一下进程间通信,了解相关知识。
luciferisnotsatan 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 redleaves 的回复:]

具体原因1楼说了.

解决方案:
1.使用共享内存.这样可以通用OS的帮助,得到同一块物理地址在不同进程里的虚地址...达到共享读写的目的.
2.用系统的进程操作函数来读写另一个进程的虚地址.
[/Quote]
正解
shadowlsj 2010-11-18
  • 打赏
  • 举报
回复
MARK 內存共享。
longgogo 2010-11-18
  • 打赏
  • 举报
回复
没意义吧
hw_henry2008 2010-11-18
  • 打赏
  • 举报
回复
完了,我以前的代码不见了!实现内存共享的那个···
先做个记号
besterector 2010-11-18
  • 打赏
  • 举报
回复
打酱油。。佩服楼上各位大虾,
liu163169 2010-11-17
  • 打赏
  • 举报
回复
涨涨见识
CodeBeing 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 redleaves 的回复:]

具体原因1楼说了.

解决方案:
1.使用共享内存.这样可以通用OS的帮助,得到同一块物理地址在不同进程里的虚地址...达到共享读写的目的.
2.用系统的进程操作函数来读写另一个进程的虚地址.
[/Quote]
"用系统的进程操作函数来读写另一个进程的虚地址"给个例子好吗?3Q
  • 打赏
  • 举报
回复
每个进程都有自己的空间,你在进程A中的指针所指向的内存块,在进程B中所指向不同
共享内存或者其他进程通讯方面的
redleaves 2010-11-16
  • 打赏
  • 举报
回复
具体原因1楼说了.

解决方案:
1.使用共享内存.这样可以通用OS的帮助,得到同一块物理地址在不同进程里的虚地址...达到共享读写的目的.
2.用系统的进程操作函数来读写另一个进程的虚地址.
加载更多回复(2)

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧