随笔分类 - STL
摘要:QCore/Library说明文档 李文超前言QCore/Library是一套类STL的类库,它在标准库的范围内删去了不常用的heap、deque等结构(至少我是不常用的)。并为一些容器提供了一些特殊的接口,比如vector中的push_back_unique、add和add_unique等。Library主要分为六部分,内存调试相关、容器、算法、正则、IO和Graphic,每个模块都有各自的分工,他们之间的耦合度极低,几乎每个模块都可以拆出来独立使用,下面来分别介绍各个模块。内存调试我们知道,在C/C++中内存相关的东西是极难控制的,在使用不当时可能造成各种错误,轻则内存泄漏,重则程序崩溃。
阅读全文
摘要:在上一篇中我们已经实现了一个简单的内存池,可以申请更大块的内存块来减少申请小块内存块时产生的内存碎片。在本篇中,我们需要为其加入内存泄漏的检测代码,以此来检测代码编写过程中的疏忽带来的内存泄漏。(callstack的显示暂时仅支持Windows)一、内存泄漏检测首先,改写obj和block结构,在obj中加入一个域released表示这个chunk是否被释放Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1structobj2{3#ifdef
阅读全文
摘要:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> template<typenameT1,typenameT2>inlineconstboolcompare_type(T1,T2){returnfalse;}template<>inlineconstboolcompare_type(int,int){returntrue;}template<>inlineconstboolcompare_type(floa
阅读全文
摘要:在STL中list是以双向链表的方式来存储的,应此使用给定的下标值来找到对应的节点所需的时间复杂度为O(n),相比vector直接使用原生指针会慢一些。因为是双向链表的关系,那么必然有一种结构来表示链表中的节点。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> template<typenameT>struct__list_node{__list_node<T>*prev;__list_node<T>*ne
阅读全文
摘要:首先是vector的定义 template <typename T> class vector { };让我们先来看看vector中的一些别名 public: typedef T value_type; typedef T* pointer; typedef T& reference; typedef const T& const_reference; typedef s...
阅读全文
摘要:traits技术被广泛应用于STL中,通过它您可以轻松的萃取出一个对象的特性。在STL中也是通过它来实现性能的最优化,比如一个对象是个POD对象(Plain Old Data),则在拷贝过程中直接可以通过memcpy等函数拷贝,而无需调用拷贝构造函数或operator=。先来看看STL中最基本的对象iterator template <typename T, typename Size = size_t, typename Difference = ptrdiff_t> struct iterator { typedef T ...
阅读全文
摘要:内存池的作用:减少内存碎片,提高性能。首先不得不提的是Win32和x64中对于指针的长度是不同的,在Win32中一个指针占4字节,而在x64中一个指针占8字节。也正是不清楚这一点,当我在x64中将指针作为4字节修改造成其他数据异常。首先我们先来定义三个宏 #define ALIGN sizeof(void*) #define MAX_BYTES 128 #define MAX_COUNT (MAX_BYTES / ALIGN)正如前面所说的,为了兼容Win32与x64应此我们将要申请的内存按void*的大小来对齐。正如前...
阅读全文
摘要:作为一个山寨的STL,那么不得不提的是其中的allocator(空间配置器)。顾名思义,它是负责空间分配用的,下面代码十分简单,仅对C函数malloc和free进行了薄薄的一层封装,同时给定了自定义函数free_handler用于在空间分配时候由于内存被占满了而导致的分配失败。这里值得注意的是:这个释放函数的函数指针应该是由调用方来负责指定,并且它仅有一个参数表明至少需要释放多少字节的内存。下面来看代码,代码非常简单,应此这里就不逐一展开说明了。 template <typename T> class allocator { public...
阅读全文
摘要:数据结构allocator内存池内存池V2traits,construct&destructvectorlistrbtreemap&sethashtablehash_map&hash_set算法
阅读全文