STL源代码剖析(一) - 内存分配】的更多相关文章

Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符合标准,名为allocator的配置器,但SGI自己从未使用过它,主要原因是它仅仅把C++的new操作符和delete操作符做了一层薄薄的封装. C++的new操作符和delete操作符进行内存配置时,new:先配置内存,然后构造对象.delete:先析构对象,然后释放内存.SGI STL将内存配置…
看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this software * and its documentation f…
<<STL源代码剖析>> 侯捷著 非常早就买了这本书, 一直没看, 如今在实验室师兄代码的时候发现里面使用了大量泛型编程的内容, 让我有了先看看这本书的想法. 看之前我对于泛型编程了解甚少, STL倒使用的比較熟练. 看完这本书之后, 仅仅能表示曾经对于STL的使用真是跟小孩玩似得, 仅仅懂其冰山一角. 在真正的深入到源代码之后, 对于STL中不easy理解的部分如 迭代器(iterator), 仿函数(functor), 配接器(adapter)才有了一个彻彻底底的了解, 这样的…
前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法.本文剖析STL其它的算法,比如排序算法.合并算法.查找算法等等.在剖析的时候.会针对函数给出一些样例说明函数的使用.源代码出自SGI STL中的<stl_algo.h>文件.注:本文的源代码许多,可能兴许博文会对这些算法进行归类分析. STL算法剖析 #ifndef __SGI_STL_INTERNAL_ALGO_H #define __SGI_STL_INTERNAL_ALGO_H #include <stl_hea…
前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_compare.max,min.mismatch,swap,copy,copy_backward.copy_n.当中一个比較重要的算法就是copy.针对copy的剖析在源代码中能够看到具体的注解. 本文剖析的源代码出自SGL STL中的<stl_algobase.h>文件. 基本算法剖析 #ifndef…
前言 本节介绍set集合的相关算法,各自是并集set_union,差集set_difference,交集set_intersection 和对称差集set_symmetric_difference.这是个函数都提供了两个版本号的函数原型:第一个版本号是採用默认的排序比較方式operator<:第二个版本号是用户通过仿函数comp自行指定排序方式.注意:这四个算法接受的输入区间都是有序的,输出也是有序的. 以下对set算法进行剖析,详细凝视详见源代码,同一时候给出样例说明该算法的功能.本文源代码摘…
提要 先看一段用迭代器的代码: int a[] = {1, 2, 3, 4, 5}; vector<int> v1( a, a+5); vector<int>::iterator iter = v1.begin( ); for (; iter != v1.end( ); ++iter) { cout << *iter << " "; } cout<<endl; STL的中心思想在于:将数据容器(containers)和算法(a…
这一节是讲空间的配置与释放,但不涉及对象的构造和析构,仅仅是解说对象构造前空前的申请以及对象析构后空间怎么释放. SGI版本号的STL对空间的的申请和释放做了例如以下考虑: 1.向堆申请空间 2.考虑了多线程.可是这节目的仅仅是解说空间配置与释放,因此忽略了多线程.集中学习空间的申请和释放. 3.内存不足时的应变措施 4.考虑到了内存碎片的问题.多次申请释放小块内存可能会造成内存碎片. 在C++中.内存的申请和释放是通过operator new函数和operator delete函数,这两个函数…
1 vector 在C++中使用vector应该是非常频繁的,但是你是否知道vector在计算内存分配是如何么? 在c++中vector是非常类似数组,但是他比数组更加灵活,这就表现在他的大小是可以自动分配的,就是当你的数据量增大的时候,自动的为你分配空间,当你的分配的大小不够的时候,他就会在分配的内存后边增加2倍大小的空间, vector增加的空间是连续的,因此这个就涉及到了,当你在后边的空间不够的时候,那么计算机就会把你的数据copy一份空间更大的地方来给你分配足够的空间,这,就给计算机带来…
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie inplace_merge(应用于有序区间) -------------------------------------------------------------------- 描写叙述:假设两个连接在一起的序列[first, middle)和 [middle, last]都已排序, 那么 inplace_merge 可将它们结合成单一一个序列,并仍有序. 源代码: template…