条款50: 了解new和delete的合理替换时机

/*条款50: 了解new和delete的合理替换时机*/
#include<iostream>
using namespace std;
//替换编译器提供的operator主要三个最觉的理由
// 1 用来检测运用上的错误 2 为了强化效能 3为了收集使用上的统计数据
static const int signature = 0xDEADBEEF;
typedef unsigned char Byte;
void* operator new(std::size_t size)throw(std::bad_alloc){
	using namespace std;
	size_t realSize = size+2*sizeof(int);//增加大小,使能够塞入两个signatrue
	void *pMem = malloc(realSize);
	if(!pMem)
		throw bad_alloc();
	*(static_cast<int*>(pMem))=signature;
	*(reinterpret_cast<int*>(static_cast<Byte*>(pMem)+realSize-sizeof(int))) = signature;
	return static_cast<Byte*>(pMemm)+sizeof(int);//返回指针,指向恰位于第一个signature 之后的内在位置 
	
}
//齐位:要求指针 的地址必须是4的倍数或double的地址必须是8的倍数,如果没有奉行这个约束条件,可能导致运行期硬件异常,一些系统如果满足条件则效率最佳,malloc就是这样工作的,如果operator new 中没有返回 一个自malloc的指针,而是返回得自malloc且统称一个int大小的指针 ,没有人能保证它的安全,许多平台上已有商业产品可以替代编译器自带的内存管理器,你可以重新连接使用,但需要花点钱。另一个选择是开放源码领域的内存管理器如:BOOST的pool就这样一个分配器
// 本条主题是了解何时可在“全局性的”或“class专属”基础上合理替换缺省的new和delete
// 1 为了检测运用错误 2 为了收集动态分配内存之使用统计信息 3 为了增加分配和归还的速度 4 为了降低缺省内在管理器带来的空间额外开销 5 为了弥补缺省分配器中的非最佳齐位 6 为了将相关对象成簇集中(如果你知道特定的某个数据结构往往被一起使用,而你双希望 在处理这些数据时将“内在页错误”的频率降至最低,那么为此数据结构创建 一个heap就有意义 ) 7 为了获得非传统的行为 
int main(){

	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值