社区
C++ 语言
帖子详情
C++不同进程间的指针的传递问题
CodeBeing
2010-11-16 06:12:29
我想把一个进程里的一个对象的指针传给其他的进程来共享资源,我已经int iptr=(int)ptr并成功的把iptr的值传给了另外的进程B,可是在B中调用iptr的指针指向的资源时出错,这是为啥啊?怎么才能成功?
...全文
1306
23
打赏
收藏
C++不同进程间的指针的传递问题
我想把一个进程里的一个对象的指针传给其他的进程来共享资源,我已经int iptr=(int)ptr并成功的把iptr的值传给了另外的进程B,可是在B中调用iptr的指针指向的资源时出错,这是为啥啊?怎么才能成功?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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的帮助
猫已经找不回了
2010-11-18
打赏
举报
回复
[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
高性能架构探索
2010-11-16
打赏
举报
回复
每个进程都有自己的空间,你在进程A中的指针所指向的内存块,在进程B中所指向不同
共享内存或者其他进程通讯方面的
redleaves
2010-11-16
打赏
举报
回复
具体原因1楼说了.
解决方案:
1.使用共享内存.这样可以通用OS的帮助,得到同一块物理地址在不同进程里的虚地址...达到共享读写的目的.
2.用系统的进程操作函数来读写另一个进程的虚地址.
加载更多回复(2)
V
C++
实现CMD命令执行与获得返回信息
命名管道是
进程
间
通信(IPC,Inter-Process Communication)的一种方式,允许
不同
进程
之
间
交换数据。在我们的场景中,我们可以创建一个服务器端命名管道,CMD
进程
作为客户端,通过管道发送返回信息。 ```cpp // ...
【
C++
智能
指针
相关应用】深入探索
C++
智能
指针
:跨
进程
、动态库与最佳实践
为了解决这些内存管理的挑战,
C++
引入了智能
指针
(Smart Pointers)。这些特殊的对象模拟了
指针
的行为,但在适当的时候自动释放内存。
C++
进程
间
传递
结构数据,内存共享
需要注意的是,
进程
间
共享内存需要进行同步和互斥操作,以确保数据的正确性和一致性。可以使用互斥量或其他同步机制来实现。在另一个
进程
中,通过相同的共享内存名称,使用 `OpenFileMapping` 函数打开共享内存对象...
C++
进程
外COM
传递
数组
1、
进程
外COM与
进程
内COM
传递
数组的区别: 在
进程
内COM定义函数: void fun(int* p1,int num1) { 编写方法,p是指向int类型的数组
指针
,num是数组的长度 } 在main里面 { 定义数组 int* p=new int[3];...
C/
C++
:
进程
间
通信
进程
间
通信(Inter-Process Communication,IPC)是指
不同
的
进程
之
间
进行数据交换和通信的机制。
进程
间
通信允许多个独立运行的
进程
协同工作以完成某个任务或共享信息。pipewriteread
不同
的 IPC 方法适用于
不同
的应用...
C++ 语言
65,193
社区成员
250,524
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章