8

我正在尝试为性能敏感的应用程序重载全局运算符 new 和 delete。我已阅读http://www.informit.com/articles/article.aspx?p=30642&seqNum=3中描述的问题以及使用英特尔 TBB 分配器的建议http://www.intel.com/technology/itj/ 2007/v11i4/5-foundations/5-memory.htm

由于我是第一次重载 new 和 delete,所以我有几个问题。

我是否应该在所有包含“新”调用的文件中包含包含重载新函数的新标头 Allocator.h(或 Pre.h)?这很乏味。

或者我应该在每个翻译单元中使用包含 Allocator.h(之前)的“gcc -include Allocator.h ...”吗?我想尽可能地保持代码平台独立。所有编译器都支持类似于“gcc -include”的东西吗?

4

2 回答 2

14

如果你想重载全局operator newand operator delete,你只需要实现它。您不需要在任何地方明确定义它,因为它已经被定义为语言的一部分。

编辑:如果你想定义一个带有不同参数的操作符 new,那么你需要在任何地方 #include 它。不管你怎么做,这取决于你;这主要是风格问题。

并且不要忘记实现全局运算符 new 和 delete: newnew[]deletedelete[]std::nothrow变体的所有变体。

于 2009-03-12T17:40:22.607 回答
2

如果您使用的是 Visual Studio 并使用预编译的头文件,那么您可以将包含放入其中。我认为 gcc 也有某种形式的预编译头文件,这也会缩短你的编译时间。

于 2009-03-12T17:41:03.027 回答