Какие полезные функции вы получаете от переопределения оператора «new»?

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

  •  10-07-2019
  •  | 
  •  

Вопрос

Какие новые функции (для отладки или нет) вы считаете полезными, переопределяя новый оператор?

Это было полезно?

Решение

Основная причина, по которой мне пришлось перегрузить new , была в производительности. Одним из примеров является выделение большого количества небольших объектов, что часто довольно медленно с помощью распределителя общего назначения, но часто может быть улучшено с помощью специального распределителя lot .

Другие советы

Есть много случаев, когда необходимо переопределить оператор new. Как кто-то сказал, это в основном для пользовательского управления памятью.

Основной пример, с которым я лично имел дело, был для встроенных систем.

Во встроенной системе динамическое распределение памяти обычно является проблемой. Даже если у вас есть встроенная операционная система, которая поддерживает ее, у вас есть все виды проблем, с которыми вам, возможно, придется иметь дело (например, встроенные системы часто должны быть более детерминированными, чем их коллеги на ПК. Кроме того, вы можете работать в системе это должно происходить годами, в этом случае фрагментация памяти является реальной проблемой).

Из-за этого встроенные системы обычно полностью запрещают динамическое выделение памяти.

Конечно, в большинстве программных проектов вам нужна некоторая форма динамической памяти, и в этих случаях вы обычно реализуете свою собственную (т. е. имеете некоторый пул памяти, который могут запрашивать все потоки). память и т. д.).

Чтобы в проектах C ++ было проще использовать это динамическое выделение памяти вручную, я видел новый оператор переопределения проектов, использующий метод выделения проектов.

Ну, настраиваемое управление памятью и отладка. Вот и все, и все, что вы можете получить от этого тоже.

Возможно, вы разрабатываете библиотеку, которая требует некоторого дополнительного этапа инициализации определенных объектов, перегрузка позволяет вам сделать это без каких-либо неуклюжих дополнительных вызовов, которые в противном случае пользователь должен был бы набирать.

Если вы работаете с SSE / SIMD, вам обычно нужно, чтобы ваша память была выровнена по 4 словам, поэтому вы можете перегружать new для соответствующих классов, чтобы использовать memalign () (тогда как new по умолчанию делает что-то эквивалентное обычному malloc () ).

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