有关内存管理,操作的问题(多进程共享的内存,...)

wlpwind 2002-04-30 03:36:15
写消息中间件,遇到有关内存管理的问题:
(运行情景:系统中有一些通过中间件通信(本机或网络)的进程,中间件接收
从个进程送来的消息,发送给目的主机的中间件;同时中间件接收
从别的中间件送来的消息,经过处理送给想要该消息的进程.
)
1.需要开辟一块多进程共享的存储区.
2.怎样以尽量快的速度在进程间传送数据.
3.多个进程在一块存储区读写有关的问题及技术.

///请就上述问题给于帮助,希望尽可能详细.
///若有开发过实时消息中间件的gg,jj,dd,mm,请给于更多帮助(经验,教训,
///资料,及其他技术问题),需要分的话,可另开贴请客。
///email:wlpwind@sohu.com







...全文
334 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlpwind 2002-05-02
  • 打赏
  • 举报
回复
///(作者贴)
运行环境 :(windows98)&&(windows2000)

问题扩展:
4.需要经常对该内存进行随机存取,该如何设计数据结构.
5.指针问题.
[e.g. 有进程a和进程b共享内存段mem,进程a有一个指针
pa指向mem中某地址(pa应是虚拟内存地址吧?),现
在要将pa指向的数据传给b,一个较好的方法应是将指
针传给b,由b自己读取数据,但pa在b中不一定指向同
样的地址。如何出理?----是否还有其他问题? ]
/// 欢迎就内存管理,共享等进行深入讨论。

xqing157 2002-05-01
  • 打赏
  • 举报
回复
对阿,我就是想这样做,但是如果出现MapViewOfFile对同一文件印象对象操作得到的地址不一样这种情况呢?
不这样,那有什么好的方法呢?请赐教!!!!
webber84 2002-05-01
  • 打赏
  • 举报
回复
你试试把指针指着的地址用一个新的内存映射来共享,或者干脆想别的办法。
xqing157 2002-05-01
  • 打赏
  • 举报
回复
对象本身号搞定,但是它里面的那些指针成员不好弄!
webber84 2002-05-01
  • 打赏
  • 举报
回复
你把这些对象做成相互连接的链表不行吗?
xqing157 2002-05-01
  • 打赏
  • 举报
回复
webber84(糕鱼昏):你好,指定映射地址可能不行。因为这些对象数目不定,我不可能一一指定具体的地址。
webber84 2002-05-01
  • 打赏
  • 举报
回复
可以用MapViewOfFileEx(),它的最后一个参数就是指定映射地址的,只要在两个进程中用同一个地址参数就可以解决你所说的问题。
xqing157 2002-05-01
  • 打赏
  • 举报
回复
那请问如果我要在两个程序间进行数据共享,具体的说是一些对象,而且这些对象里有指针成员变量。我怎么保证这些指针在不同的进程中都是一样有效的呢?
webber84 2002-05-01
  • 打赏
  • 举报
回复
98下肯定都是一样的,2000下一般不一样。至于网络好像不行吧。
Microsoftadherent 2002-05-01
  • 打赏
  • 举报
回复
用MapViewOfFile能跨越网络建共享内存吗?
xqing157 2002-05-01
  • 打赏
  • 举报
回复
借宝地一用。
请问在不同的进程中,每次用MapViewOfFile对同一文件印象对象操作得到的地址在什么情况下会不一样?
蒋晟 2002-05-01
  • 打赏
  • 举报
回复
How do I share data in my DLL with an application or with other DLLs?

http:// msdn.microsoft.com / library / en-us / vccore / html / _core_How_do_I_share_data_in_my_DLL_with_an_application_or_with_other_DLLs.3f.asp

webber84 2002-04-30
  • 打赏
  • 举报
回复
每一个进程都调用下面的代码来创建文件映射对象:
HANDLE hFM=CreateFileMapping(-1,NULL,PAGE_READWRITE,
MemorySizeHighWord,MemorySizeLowWord,"share");
然后在每个进程中进行映射:
LPVOID lpVoid=MapViewOfFile(hFM,FILE_MAP_ALL_ACCESS,0,0,0);
这样每个进程都可以对lpVoid指向的地址进行读写了。

wlpwind 2002-04-30
  • 打赏
  • 举报
回复
详细点可以么?
wlpwind 2002-04-30
  • 打赏
  • 举报
回复
详细点可以么?
蒋晟 2002-04-30
  • 打赏
  • 举报
回复
用一个DLL就行
开一个共享段
#pragma

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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