当前位置:  技术问答>linux和unix

过河小兵,求救各位大哥,我想把stl中的map,vector等容器,做成内存共享方式,希望大哥大姐们指点一下

    来源: 互联网  发布时间:2015-12-10

    本文导语:  我在linux下用stl写了一应用程序,所有的东西都一开始初始化在容器中,但是现在要在多进程多先程的环境下运行,所以希望有办法直接把容器共享,这样就不需要初始化好几次,也能节省不少内存,希望大家指点一...

我在linux下用stl写了一应用程序,所有的东西都一开始初始化在容器中,但是现在要在多进程多先程的环境下运行,所以希望有办法直接把容器共享,这样就不需要初始化好几次,也能节省不少内存,希望大家指点一下也可以留下联系方式进行交流,tlq2260@hotmail.com,谢谢。

|
我估计楼主想共享容器,不仅仅是想共享容器中的数据吧,一定还想要容器中的函数也是可用的(想要一个可管理的容器)。但你有办法将本进程中容器中的函数(如:push_back,length,size)共享给另外一个进程的地址空间吗。容器的vtable指针,数据成员确实是一个线性结构,但非虚函数的代码可不在这个结构中,这些函数在本进程地址空间内是绝对地址,如果要共享一定要有办法将它们映射到另一进程的地址空间的相同位置。这恐怕只有内核虚存调度程序才可以做到(因为你要搬走占地方的别的东西),而且这些代码所在的原进程首地址及大小,你也要一一确定(首地址也许可以通过取函数指针得到,但大小怎么得到,好像汇编代码才可以直观的知道一段procedure有多大)

|
如果是用stl容器我认为没法实现的,因为,进程间共享内存区是线性地址,像数组一样连续的存储空间才能作为共享内存分配出来。
我实在想不出你有什么办法把STL里vector里的函数(代码部分根本没办法共享,即使是vector的线性数据部分你也没有办法把它分配为共享内存,除非改vector的代码),map和set的二叉树数据结构及其成员函数更是不可能。

|
不知道多进程共享内存还能实现,顶

|
工程量太大。
相当于你要实现一个线程安全的、存储在共享空间内的map vector,工作量不是一般的大。

|
想了一次,是可以实现的,但要对于特定的类型(非泛型),并且要实现自己的内存池和分配算法(不再使用指针)
待病好了,改天作一个出来。。。嘿嘿


|
static 或 singlton模式

|
多进程多先程情况下可能要加锁(mutex)

|
设计模式里面好像没有static啊,

|
应该可以在Alloctor上想想办法!
自己实现一个基于share memory的Alloctor,然后在在创建Vector map时使用自己的Alloctor.

|
boost的maillist上面有过相关的讨论,结论是不可能。

不过也有人说自己实现了共享内存的allocator,你可以发信到boost的maillist上面去问一下

|
自己实现一个内存池,将此内存池设为共享,
修改stl的allocator,从这个内存池中分配??
这样可行不?


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3