我正在尝试重载全局运算符new和删除性能敏感的应用程序.我已经阅读了http://www.informit.com/articles/article.aspx?p=30642&seqNum=3中描述的问题以及使用英特尔TBB分配器的建议http://www.intel.com/technology/itj/ 2007/v11i4/5-基金会/ 5-memory.htm
由于我第一次超载新的和删除,我有几个问题.
我应该在包含"新"调用的所有文件中包含我的新标题Allocator.h(或Pre.h),其中包含重载的新函数吗?这很乏味.
或者我应该在每个翻译单元中使用包含Allocator.h(之前)的"gcc -include Allocator.h ..."?我希望尽可能保持代码平台的独立性.所有编译器都支持类似于"gcc -include"的东西吗?
如果你想重载全局operator new
和operator delete
,你只需要实现它.您不需要在任何地方明确定义它,因为它已经被定义为语言的一部分.
编辑:如果你想定义一个带有不同参数的operator new,那么你需要#include它到处都是.但是你这样做取决于你; 这主要是风格问题.
而且不要忘记实现全球运营商的所有变种new和delete: ,new
,new[]
,delete
,delete[]
和std::nothrow
变种.