C++内存管理06-vc6,vs2013的标准分配器评析

C++内存管理6-vc6,vs2013评析

先看看vc6allocate的源码:

template<class _Ty> inline
_Ty _FARQ *_Allocate(_PDFT _N, _Ty _FARQ *)
{
if (_N < 0)
		_N = 0;
	return ((_Ty _FARQ *)operator new((_SIZT)_N * sizeof (_Ty))); 
}


template<class _Ty>
class allocator 
{
public:
	typedef _SIZT size_type;
	typedef _PDFT difference_type;
	typedef _Ty _FARQ *pointer;
	typedef const _Ty _FARQ *const_pointer;
	typedef _Ty _FARQ& reference;
	typedef const _Ty _FARQ& const_reference;
	typedef _Ty value_type;
	pointer address(reference _X) const
	{
return (&_X); 
}
	const_pointer address(const_reference _X) const
	{
return (&_X); 
}
	pointer allocate(size_type _N, const void *)
	{
return (_Allocate((difference_type)_N, (pointer)0)); 
}
	char _FARQ *_Charalloc(size_type _N)
	{ 	return (_Allocate((difference_type)_N,
			(char _FARQ *)0));
 }
	void deallocate(void _FARQ *_P, size_type)
	{
operator delete(_P); 
}
	void construct(pointer _P, const _Ty& _V)
	{ 
_Construct(_P, _V);
 }
	void destroy(pointer _P)
	{
_Destroy(_P);
 }
	_SIZT max_size() const
	{
_SIZT _N = (_SIZT)(-1) / sizeof (_Ty);
		return (0 < _N ? _N : 1)
 }
	};

其实我们只需要看allocate函数和deallocate,
因为它调用的是

_Ty _FARQ *_Allocate(_PDFT _N, _Ty _FARQ *)
{
if (_N < 0)
		_N = 0;
	return ((_Ty _FARQ *)operator new((_SIZT)_N * sizeof (_Ty))); 
}

其实也就先当与只调用了malloc,对内存并没有做任何优化。
同理我们看看vs2013的alloctor,看看有没有做升级,部分函数如下:
在这里插入图片描述
其中_Allocate如下:
在这里插入图片描述
可得它也没有做任何改变,有点小失望!!!!

人生总要有不如意嘛,风雨过后总会有彩虹。但是学习不能停止,要不然真的就一无所有啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值