免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3417 | 回复: 6
打印 上一主题 下一主题

如何在共享内存里申请变量空间 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-28 09:13 |只看该作者 |倒序浏览
我想在开辟了的一块共享内存里面定义一个hash_map,请问如何可以做到?

论坛徽章:
0
2 [报告]
发表于 2005-06-28 11:27 |只看该作者

如何在共享内存里申请变量空间

如果改用堆来做,你会吗?

如果会的话,方法是一样的,只是注意共享内存里别用指针。

论坛徽章:
0
3 [报告]
发表于 2005-06-28 11:40 |只看该作者

如何在共享内存里申请变量空间

我不太清楚您的意思。
如果定义一个结构,malloc返回时候指针转换成那个结构指针就可以了。

(hash_map *)shmat(.....)

论坛徽章:
0
4 [报告]
发表于 2005-06-29 09:01 |只看该作者

如何在共享内存里申请变量空间

沉的这么快

如果改用堆来做,你会吗?

如果会的话,方法是一样的,只是注意共享内存里别用指针。

老大,能不能说清楚一点。
hash_map不是单纯的一个结构,地址指针强行转换不行,还是我理解错了?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-06-29 09:15 |只看该作者

如何在共享内存里申请变量空间

由于共享内存是一块内存BLOCK,所以要实现链表结构很困难,也就是说往链表中插入一条记录是不方便的
可以考虑给共享内存分区,做成类似于文件系统一样的东西
如:
HEAD区:记录hash_map的一些共有信息,如以下各区的起始地址,hash表中的索引项个数等等
hash表区:记录hash值及第一个项的“地址”(一个int值,表明块号)
块索引区:多个字节组成的bitmap,每个bit标识后面的一个块,‘0’表示块空闲,‘1’表示块被占用
数据区:按hash链表结构大小划分成n个块,用来实现一个链表,但next不是一个指针,而是一个int,表示下一个的块号

论坛徽章:
0
6 [报告]
发表于 2005-06-30 02:07 |只看该作者

如何在共享内存里申请变量空间

自己写Memory Allocator, 把共享内存一块一块的分给hash_map. 如果用STL,把它写成Allocator类.参看STL头文件里Allocator类的实现.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-06-30 08:14 |只看该作者

如何在共享内存里申请变量空间

STL里对小内存的alloc是通过内存池来实现的,写得很精巧,可以参考一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP