Перегрузка глобального оператора new / delete в C ++
-
11-07-2019 - |
Вопрос
Я пытаюсь перегрузить глобальный оператор 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), содержащий перегруженную новую функцию, во все файлы, содержащие " new " звонки? Это утомительно.
Или я должен использовать " gcc -include Allocator.h ... " который включает в себя Allocator.h (до) в каждой единице перевода? Я хочу максимально сохранить независимость платформы кода. Все ли компиляторы поддерживают что-то аналогичное "gcc -include"?
Решение
Если вы хотите перегрузить глобальный оператор new
и оператор delete
, вам просто нужно реализовать это. Вам не нужно явно определять его везде, так как он уже определен как часть языка.
Редактировать: если вы хотите определить новый оператор, который принимает другие параметры, тогда вам нужно будет # включить его везде. Однако вы делаете это на ваше усмотрение; это в основном вопрос стиля.
И не забудьте реализовать все варианты глобального оператора new и delete: new
, new []
, delete
, < code> delete [] и варианты std :: nothrow
.
Другие советы
Если вы используете Visual Studio и используете предварительно скомпилированные заголовки, вы можете добавить туда. Я думаю, что gcc также имеет некоторую форму заголовков для предварительной компиляции, что также улучшит ваше время компиляции.