Перегрузка глобального оператора new / delete в C ++

StackOverflow https://stackoverflow.com/questions/639676

  •  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 также имеет некоторую форму заголовков для предварительной компиляции, что также улучшит ваше время компиляции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top