id is hang_2

冉杰文

个人站

一直在模仿....


侯捷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版本如下:
  • BC版本:
  • Gnu 2.9版本:
  • 不太理想,额外开销大,包装一层后额外开销大;
  • SGI STL不使用这个allocator
  • STL使用alloc:
  • 16条链表,每条链表下面申请空间,额外的空间是Cookie,记录内存的大小
  • Gnu 4.9版下: - 使用的allocator,没有使用alloc;为什莫不用,不知道!
  • G4.9所附的标准库中,有许多extention allocators,其中_pool_alloc就是G2.9的alloc.

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

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

声明:本博客由 ranjiewen原创,如需使用请引用或者添加转载字样,谢谢配合。同时也仅代表个人观点。

 打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by 冉杰文,分享从这里开始,精彩与您同在