做网站的图片要求大小,虚拟电子商务网站建设前期规划方案,电器网站建设目的,响应式网站设计优点2019独角兽企业重金招聘Python工程师标准 我厂内存次神马的一般都自己实现。我曾经也自己写过一个demo(mempool)。后来发现boost库里面有一个内存池库boost pool#xff0c;貌似很好用#xff0c;使用挺好#xff0c;例子可以贴出来。 boost一共有4种内存池 我厂内存次神马的一般都自己实现。我曾经也自己写过一个demo(mempool)。后来发现boost库里面有一个内存池库boost pool貌似很好用使用挺好例子可以贴出来。 boost一共有4种内存池为pool, object_pool, singleton_pool, pool_alloc。其中前三种应该应用都很多我这里仅仅只有前2个demo. 1 pool pool是最简单的内存池类可以返回一个无符号的内存指针。因为我平时C用的远比C多所以这个类其实更适合我使用。 它的原理我没有细看。理论上也是每次分配一大块内存这个内存卡会被分成小块通过链表进行相连。链表至少记录当前可以分配的内存以及已经分配过正在使用的内存。每次分配都从可以分配链表分配即可。 他只要有2个函数可以供大家使用malloc和free。据说free不用程序猿自己搞pool类可以自行回收。anyway自己显示调用free肯定没问题。 下面是调用例子 typedef struct _my_pool_test_t
{int a;int b[];
} my_pool_test_t;void test_pool()
{pool pl( sizeof(my_pool_test_t) 5* sizeof(int) );my_pool_test_t* test (my_pool_test_t*)pl.malloc();test-a 100;for(int i0; i5; i){test-b[i] i2;}cout pool a:\t test-a endl;cout pool b2:\t test-b[2] endl;pl.free(test);
} 其中my_pool_test_t内部使用了 柔性数组。就是申请一个 my_pool_test_t赋值并使用。 2 object_pool 从名字也可以看出来这个内存池是对象内存次是分配object的。 他和pool最大的区别也在此。 pool每次需要指定分配大小它不需要但是他需要指定分配的类型其实通过类型能算出大小。 示例代码如下 class Class_Demo
{public:int a;int b;Class_Demo(int ia1, int ib 2 ) : a(ia), b(ib) {}
};void test_object_pool()
{object_pool Class_Demo pclass;Class_Demo *cl pclass.malloc();cl pclass.construct(2,3);cout object pool a:\t cl - a endl;cout object pool b:\t cl - b endl;
} 这个就是直接分配一个类Class_Demo的内存池赋值打印完事。 3 全部代码 test_mem.cpp /**************************************************************************** * Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved* **************************************************************************//*** file test_mem.cpp* author liujun05(combaidu.com)* date 2014/02/26 14:04:16* brief * **/#includeboost/pool/object_pool.hpp
#includeboost/pool/pool.hpp
#includeiostream
using namespace std;
using namespace boost;typedef struct _my_pool_test_t
{int a;int b[];
} my_pool_test_t;class Class_Demo
{public:int a;int b;Class_Demo(int ia1, int ib 2 ) : a(ia), b(ib) {}
};void test_pool()
{pool pl( sizeof(my_pool_test_t) 5* sizeof(int) );my_pool_test_t* test (my_pool_test_t*)pl.malloc();test-a 100;for(int i0; i5; i){test-b[i] i2;}cout pool a:\t test-a endl;cout pool b2:\t test-b[2] endl;pl.free(test);
}void test_object_pool()
{object_pool Class_Demo pclass;Class_Demo *cl pclass.malloc();cl pclass.construct(2,3);cout object pool a:\t cl - a endl;cout object pool b:\t cl - b endl;
}int main()
{test_pool();test_object_pool();return 0;
}/* vim: set expandtab ts4 sw4 sts4 tw100: */ 编译请自行指定boost库地址 g test_mem.cpp -o mem -I ../include/ -L../lib -lboost_system -lboost_thread 执行发现一切预期之内 liujun05cq01-rdqa-dev012.cq01:~/test/boost/test$ ./mem
pool a: 100
pool b2: 4
object pool a: 2
object pool b: 3 转载于:https://my.oschina.net/jungleliu0923/blog/203314