其实本原则主要是建议你去实现new和delete的自定义,其根本原理是系统自带的new和delete是一种紧具备基本功能的操作符,具有普遍适用性,不是说你用系统自带的new和delete不行,而是说如果你自定义专属的new和delete更好。
作者首先列举了三大让你自定义new和delete的理由:
1、用来检测运用上的错误。这一点说的是系统的new和delete是实现了基本的分配和回收功能,针对各种错误,它们给出的处理方式过于生硬和抽象;
2、为了强化效能。系统自带的new和delete是出于各种考虑,基于普遍适用原则而设计的,这就意味着广泛而不专一。自定义版本的new和delete是针对具体情况而得出的具体解决方案更满足你自己的需求;
3、为了收集使用上的统计数据。自定义的new和delete可以实现这些功能。
在这里介绍两个概念——underruns和overruns。它们就是写入点在分配内存的前端溢出和写入点在分配内存的末端溢出。
作者举了计算机存储需要齐位的细节,在这方面默认的new和delete并不能满足要求,于是很多厂家就自己写了内存处理器,其中就包括自定义的new和delete。
接着作者对为什么要在恰当的时机自定义new和delete的理由做了补充:
4、为了增加分配和归还的速度。一般来讲系统自带的new和delete比自定义的new和delete要慢,这主要是因为自定义new和delete是为专属类型区块尺寸而设计的,而默认new和delete不是;
5、为了降低缺省内存管理器带来的额外空间开销。默认new和delete还需要额外的内存开销,如果处理的对象是小型的,那内存开销就更大了;
6、为了弥补缺省分配器中的非最佳齐位。某些计算机体系结构只对特定齐位保持最佳处理状态;
7、为了将相关对象成簇集中。某些数据对象往往被集中使用,而且你有希望将内存也错误的几率降至最低,你往往希望把这些对象集中到另一个堆上去。
8、为了获得非传统行为。你可能希望自定义的new和delete完成更多的自定义功能。
总结:
很多时候的确有必要自定义new和delete。
原则50:了解new和delete的合理替换时机
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
- 题目内容: class Fruit{int no;double weight;char key;public:vo...