为C++标准库容器写自己的内存分配程序
根据sgi 的STL源码的二级分配算法改写的内存池分配程序,只要稍微修改就可以实现共享内存方式管理,使用C++标准库容器中的map,set,multimap,multiset测试通过,vector测试通不过,原因是在内存回收的时候考虑的比较简单,vector每次分配内存个数不固定,回收也不固定,这样的话,程序还需要继续完善。\,lb6G@Eb[%p`F2z-ccp"s
内存池管理程序源码如下:^[r:MC?)j;y
l&h#A)G_
以下是引用片段: U?x4`m}O1@
#ifndef MY_ALLOCATOR_H_
#define MY_ALLOCATOR_H_
#include "stdafx.h" :~F~~5KGRq"q6?
#include <limits> 1MNuP7QvvS
#include <iostream>
namespace happyever @6Ypk z8q,Sud s
{
enum { NODENUMS = 2 };
union _Obj
{ -zi1Blk2jN'v2J
union _Obj* M_free_list_link; {p2oB9hL8p
char M_client_data[1]; g+Yh$|$]7}A_
} ; n UF:gsQ,Z W
typedef union _Obj Obj; T4Qt#b-G(QDl:W
struct _Cookie [BP EL&v(p
{ !Q@:B/Ez(E
int iShmKey; /* 共享内存键值 */
int iShmID; /* iShmKey对应的shmid */ _Ee({f-h W
int iSemKey; /* 锁信号键值 */ IC4JO?P"NV-y%W[z'e
int iSemID; /* 锁信号标识 */
int iTotalsize; /* 容器总容量 */ d-U V(Mh;fe
void* pStartall; /* 共享内存自身地址 */
char* pStartfree; /* 自由空间的开始地址*/
char* pEndfree; /* 自由空间的结束地址*/ i3\&rb3{a,]3R
int iUseNum[NODENUMS]; jxCTI%Z
/*用来存放free_list中节点的size*/ CP:X8qW3T)cVP
short sFreelistIndex[NODENUMS];
/*存放分配内存节点的链表*/
Obj* uFreelist[NODENUMS]; &k5H1Y};B*f ?J rY
};
typedef struct _Cookie Cookie; +t9a+d+z f
//Obj;