Перегрузка глобального оператора new / delete в C ++ - PullRequest
8 голосов
/ 12 марта 2009

Я пытаюсь перегрузить глобальный оператор new и удалить для чувствительного к производительности приложения. Я прочитал проблемы, описанные в http://www.informit.com/articles/article.aspx?p=30642&seqNum=3 и рекомендации по использованию распределителя Intel TBB http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm

Поскольку я перезагружаю новое и удаляю в первый раз, у меня есть несколько вопросов.

Должен ли я включать мой новый заголовок Allocator.h (или Pre.h), содержащий перегруженную новую функцию, во все файлы, содержащие «новые» вызовы? Это утомительно.

Или я должен использовать «gcc -include Allocator.h ...», который включает Allocator.h (перед) в каждую единицу перевода? Я хочу максимально сохранить независимость платформы кода. Все ли компиляторы поддерживают что-то аналогичное "gcc -include"?

Ответы [ 2 ]

14 голосов
/ 12 марта 2009

Если вы хотите перегрузить глобальные operator new и operator delete, вам просто нужно реализовать это. Вам не нужно явно определять его везде, так как он уже определен как часть языка.

Редактировать: если вы хотите определить новый оператор, который принимает другие параметры, то вам нужно включить его везде. Однако вы делаете это на ваше усмотрение; это в основном вопрос стиля.

И не забудьте реализовать все варианты глобального оператора new и delete: new, new[], delete, delete[] и варианты std::nothrow.

2 голосов
/ 12 марта 2009

Если вы используете Visual Studio и используете предварительно скомпилированные заголовки, вы можете добавить туда. Я думаю, что gcc также имеет некоторую форму заголовков для предварительной компиляции, что также улучшит ваше время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...