社区
C++ 语言
帖子详情
C++不同进程间的指针的传递问题
CodeBeing
2010-11-16 06:12:29
我想把一个进程里的一个对象的指针传给其他的进程来共享资源,我已经int iptr=(int)ptr并成功的把iptr的值传给了另外的进程B,可是在B中调用iptr的指针指向的资源时出错,这是为啥啊?怎么才能成功?
...全文
1369
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)
面试中的
C++
常见
问题
1.在
C++
程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 答:首先,extern是C/
C++
语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。extern "C"是连接申明(linkage declaration),被
android parcel.cpp 函数
指针
,Parcel_
进程
间
数据
传递
Parcel,即打包。为何须要打包呢?是为了序列化。java若是要在
进程
之
间
传递
一个整数,很简单,直接传就好了;若是要传一个字符串,就稍微复杂了点:需先分配一块能够容纳字符串的内存,而后将字符串复制到内存中,再
传递
(新手可能问:为啥不直接把字符串的引用传过去呢?学过C/
C++
的地球人都知道:
进程
有本身的内存地址空
间
,一个
进程
中的1000地址可能在另外一个
进程
中是100000,Java对象的引用跟本...
C++
函数
指针
用法
C++
函数
指针
详细理解 函数
指针
初识 函数
指针
是指向函数的
指针
,并不等于函数,它能够执行函数的操作,可以跟
指针
变量一起来理解,其基本声明格式为: type (*ptrname)(形参列表); 例子,声明一个比较两个字符串大小的函数
指针
bool (*cp)(const string s1, const string s2); 需要注意的是,**不要去掉括号!!!**如果去掉括号,含义就变成了返回一个bool
指针
的函数的声明! 函数
指针
指向函数类型 再使用函数
指针
时,函数
指针
可以发挥与函数相同的功效,即
MFC
进程
间
消息
传递
:SendMessage、PostMessage与SendNotifyMessage分别如何实现,
进程
间
通讯需要注意哪些
问题
本文对比分析了MFC中三种消息
传递
机制(SendMessage、PostMessage和SendNotifyMessage)在
进程
间
通信(IPC)中的应用。SendMessage采用同步方式,适合需要立即确认的场景,可使用WM_COPYDATA
传递
数据;PostMessage是异步方式,适合单向通知;SendNotifyMessage则根据目标窗口线程决定同步或异步行为。文章重点探讨了
进程
间
通信的核心挑战(地址隔离、句柄有效性等)及对策,并针对
不同
场景给出了方法选型建议。通过WM_COPYDATA、共享内存
指针
与引用、
进程
间
通信
指针
与引用都是地址的概念,有很多相似的地方,引用能实现的功能,
指针
都能实现,它们都可以作为函数的参数
传递
,
不同
的是: 引用是对象的别名,其值不能为NULL,而
指针
却可以指向NULL 引用总是指向初始时被指定的对象,以后不能改变,
指针
变量却可以改变 //一般情况下,引用
传递
无需为形参分配新的存储空
间
,可以使形参的操作直接反映到实参上 什么情况下用
指针
? 存在不指向任何对象的可能,即NULL 能够在不
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章