摘要: C++语言一直被认为是复杂编程语言中的杰出代表之一,不仅仅是因为其繁缛的语法规则,还因为其晦涩的术语。下面要讲的就是你的老熟人—new:它是一个内存管理的操作符,能够从堆中划分一块区域,自动调用构造函数,动态地创建某种特定类型的数据,最后返回该区域的指针。该数据使用完后,应调用delete运算符,释放动态申请的这块内存。如果这就是你对new的所有认识,那么我不得不说,你依旧被new的和善外表所蒙蔽着。看似简单的new其实有着三种不同的外衣。是的,你没有看错,也不用感到惊奇,一个简单的new确实有三种不同的形态,它扮演着三种不同的角色,如下所示:newoperator operatornew p 阅读全文
posted @ 2012-05-09 16:49 笑笑小白 阅读(658) 评论(0) 推荐(0) 编辑
摘要: #pragma once#ifndef _MEMORY_POOL_#define _MEMORY_POOL_#include <list>#include <Windows.h>using std::list;template <typename Type>class MemoryPool{private:int m_nMaxCount;int m_nFreeCount;list <Type*> m_pMemList;Type * m_pType;CRITICAL_SECTION m_csMemLock;public:MemoryPool(int 阅读全文
posted @ 2012-05-09 14:52 笑笑小白 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 6.1 自定义内存池性能优化的原理书名:《C++应用程序性能优化》作者:冯宏华、徐莹、程远、汪磊 等编著出版社:电子工业出版社出版日期:2007 年 03 月如前所述,读者已经了解到"堆"和"栈"的区别。而在编程实践中,不可避免地要大量用到堆上的内存。例如在程序中维护一个链表的数据结构时,每次新增或者删除一个链表的节点,都需要从内存堆上分配或者释放一定的内存;在维护一个动态数组时,如果动态数组的大小不能满足程序需要时,也要在内存堆上分配新的内存空间。6.1.1 默认内存管理函数的不足利用默认的内存管理函数new/delete或malloc/free在堆上 阅读全文
posted @ 2012-05-09 14:46 笑笑小白 阅读(1303) 评论(0) 推荐(0) 编辑
摘要: #ifndef _MEMPOOL_H_#define _MEMPOOL_H_/*本类封装了一个内存池,采用模板类,模板参数就是内存池中分配的对象类型本类主要用链表来实现,适用于固定大小的内存块分配*/#include <vector>using std::vector;template<typename T>class CMemPool{ struct _MemNode { _MemNode *pPrev; char data[sizeof(T) - sizeof(_MemNode*)]; }; struct _MemBlock { _MemBlock *pPrev; 阅读全文
posted @ 2012-05-09 14:30 笑笑小白 阅读(625) 评论(0) 推荐(0) 编辑