社区
C++ 语言
帖子详情
C++不同进程间的指针的传递问题
CodeBeing
2010-11-16 06:12:29
我想把一个进程里的一个对象的指针传给其他的进程来共享资源,我已经int iptr=(int)ptr并成功的把iptr的值传给了另外的进程B,可是在B中调用iptr的指针指向的资源时出错,这是为啥啊?怎么才能成功?
...全文
1253
23
打赏
收藏
C++不同进程间的指针的传递问题
我想把一个进程里的一个对象的指针传给其他的进程来共享资源,我已经int iptr=(int)ptr并成功的把iptr的值传给了另外的进程B,可是在B中调用iptr的指针指向的资源时出错,这是为啥啊?怎么才能成功?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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命令执行与获得返回信息
V
C++
6.0实现CMD命令执行与获得返回信息,用CreateProcess执行CMD命令,用命名管道来获得返回的数据.基本上可以执行所有CMD命令.
C++
进程
间
传递
结构数据,内存共享
需要注意的是,
进程
间
共享内存需要进行同步和互斥操作,以确保数据的正确性和一致性。可以使用互斥量或其他同步机制来实现。在另一个
进程
中,通过相同的共享内存名称,使用 `OpenFileMapping` 函数打开共享内存对象,并使用 `MapViewOfFile` 函数将共享内存映射到该
进程
的地址空
间
中。在另一个
进程
中,通过共享内存的
指针
或者内存拷贝函数(如 `memcpy` ),可以读取共享内存中的结构数据。将要
传递
的结构数据拷贝到共享内存中,可以使用
指针
或者内存拷贝函数(如 `memcpy` )来实现。
【
C++
智能
指针
相关应用】深入探索
C++
智能
指针
:跨
进程
、动态库与最佳实践
为了解决这些内存管理的挑战,
C++
引入了智能
指针
(Smart Pointers)。这些特殊的对象模拟了
指针
的行为,但在适当的时候自动释放内存。
C++
进程
外COM
传递
数组
1、
进程
外COM与
进程
内COM
传递
数组的区别: 在
进程
内COM定义函数: void fun(int* p1,int num1) { 编写方法,p是指向int类型的数组
指针
,num是数组的长度 } 在main里面 { 定义数组 int* p=new int[3]; 调用方法 fun(p,3); } 这样是没有
问题
的,因为main中的p
(转)
C++
进程
间
和线程
间
通信
进程
间
和线程
间
通信 1.许多程序和应用一起工作达到某个共同目的的任务集。每个任务在开始执行前等待前一个任务完成。为了完成共同目标,相关线程或
进程
必须相互合作与通信。 2.依赖关系:对于任意两个线程或
进程
,存在4种依赖关系(如图) (1)通信依赖性:当线程A需要来自线程B的数据进行操作时(单向依赖) (2)合作依赖性:当线程A需要线程B拥有的资源,而且在线程A可以
C++ 语言
65,159
社区成员
250,535
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章