当前位置: 技术问答>linux和unix
如何把链表放入共享内存??
来源: 互联网 发布时间:2015-06-11
本文导语: 我在AIX下要用c++写一个程序,把一个链表放入共享内存(不能改用数组来实现),然后多个进程来使用它(只是读,不修改它的内容),我该如何做到?? | http://www-900.ibm.com/developerWorks/cn/linux/l-ipc/part5/index...
我在AIX下要用c++写一个程序,把一个链表放入共享内存(不能改用数组来实现),然后多个进程来使用它(只是读,不修改它的内容),我该如何做到??
|
http://www-900.ibm.com/developerWorks/cn/linux/l-ipc/part5/index1.shtml
|
可能是说指针所指向的地址可以从堆中分配,也可以从共享内存中分配,用c++的模版。
|
呵呵,是不是这样啊,你的程序需要用到共享内存,但是这块内存是不固定的,如果按照最大值分配,对资源是极大的浪费,
小凤的mmap()能帮到你
小凤的mmap()能帮到你
|
shmget
shmctl
...
#include
#include
shmctl
...
#include
#include
|
你想怎么做?或者说你想要得到什么效果呢?
共享内存对于使用者来说,是一块连续的内存,如果一定要它符合你的数据结构,
可以有很多方法来实现,最笨的是把结构数组整个copy过去,
呵呵,你不会是想动态的使用共享内存吧,共享内存的大小在你申请时就定义好了,如果你不停的动态申请释放,系统开销是很大的。
如果业务系统比较复杂,可以参考进程池。
共享内存对于使用者来说,是一块连续的内存,如果一定要它符合你的数据结构,
可以有很多方法来实现,最笨的是把结构数组整个copy过去,
呵呵,你不会是想动态的使用共享内存吧,共享内存的大小在你申请时就定义好了,如果你不停的动态申请释放,系统开销是很大的。
如果业务系统比较复杂,可以参考进程池。
|
shmget得到一个共享内存区,返回共享内存段的标识符
shmat接受上边的标识符,返回共享内存的地址
知道了首地址,你就用个循环把你的链表中的数据copy过去吧~~~
shmat接受上边的标识符,返回共享内存的地址
知道了首地址,你就用个循环把你的链表中的数据copy过去吧~~~
|
我想楼主的意思是需要管理一个内存池,以后每次链表中的节点需要申请内存时都从共享内存中划分一块内存吧。如果是这样还是有点麻烦的,我倒是弄过一下,不过效率很差哦。