侯捷STL学习(四)--allocator和容器时间的实现关系

第十一节 分配器

  • STL源码学习----内存管理
  • 分配器的好坏影响到容器的性能
  • operator new()里面调用malloc
  • D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\srcvc下的源代码路径
  • 分配的内存要比申请的内存大
  • 所以VC6.0下的allocator没有优化
// newop operator new(size_t) for Microsoft C++
#include <cstdlib>
#include <new>
#include <xutility> _C_LIB_DECL
int __cdecl _callnewh(size_t count) _THROW1(_STD bad_alloc);
_END_C_LIB_DECL void *__CRTDECL operator new(size_t count) _THROW1(_STD bad_alloc)
{ // try to allocate size bytes
void *p;
while ((p = malloc(count)) == 0)
if (_callnewh(count) == 0)
{ // report no memory
_STD _Xbad_alloc();
}
return (p);
} /*
* Copyright (c) 1992-2007 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V5.03:0009 */
  • allocator主要的两个操作是:allicatedeallocate;其里面调用operator newoperator delete
  • 没必要自己手动去写int *p=allocator<int>().allocate(512,(int*)0);和allocator<int>().deallocate(p,512)。要写明释放内存的大小,所以很难用,但是容器不需要考虑这些。
  • VC版本如下:

    侯捷STL学习(四)--allocator和容器时间的实现关系
  • BC版本:

    侯捷STL学习(四)--allocator和容器时间的实现关系
  • Gnu 2.9版本:

    侯捷STL学习(四)--allocator和容器时间的实现关系
  • 不太理想,额外开销大,包装一层后额外开销大;
  • SGI STL不使用这个allocator
  • STL使用alloc:

    侯捷STL学习(四)--allocator和容器时间的实现关系
  • 16条链表,每条链表下面申请空间,额外的空间是Cookie,记录内存的大小

    侯捷STL学习(四)--allocator和容器时间的实现关系
  • Gnu 4.9版下:

    - 使用的allocator,没有使用alloc;为什莫不用,不知道!

    侯捷STL学习(四)--allocator和容器时间的实现关系
  • G4.9所附的标准库中,有许多extention allocators,其中_pool_alloc就是G2.9的alloc.

    侯捷STL学习(四)--allocator和容器时间的实现关系

第十二节 容器之间的实现关系与分类

  • 依缩进的方式表示复合关系,有一个关系;比如:priority_queue里面有一个heap支撑。
  • 旁边为指针大小

    侯捷STL学习(四)--allocator和容器时间的实现关系
上一篇:泛型的几种类型以及初识winform


下一篇:centos7下kubernetes(12。kubernetes-service)