Когда Вы перегружаете новый оператор? [дубликат]

9
задан Community 23 May 2017 в 11:47
поделиться

4 ответа

Лучший случай, который я обнаружил, должен был предотвратить фрагментацию кучи, предоставив несколько кучей блоков фиксированного размера. Т.е. вы создаете кучу, которая полностью состоит из 4-байтовых блоков, другого с 8 байтами и т. Д.

Это работает лучше, чем по умолчанию «все в одном» куче, потому что вы можете повторно использовать блок, зная, что ваше распределение будет соответствовать В первом бесплатном блоке без необходимости проверять или пройти кучу ищет свободного пространства, которое правильный размер.

Недостатком является то, что вы используете больше памяти, если у вас есть 4-байтовый куча и 8-байт, и хотите выделить 6 байтов .. вам придется ставить его в 8 байт Куча, тратить 2 байта. В настоящее время это вряд ли проблема (особенно, если вы рассматриваете накладные расходы альтернативных схем)

. Вы можете оптимизировать это, если у вас есть много распределений, чтобы сделать, вы можете создать кучу этого точного размера. Лично я думаю, что потратить несколько байтов, не проблема (например, вы выделяете много 7 байтов, используя 8-байтовую кучу не большая проблема).

Мы сделали это для очень высокой производительности системы, и она удивительно работала, она сократила наши проблемы с производительностью из-за ассигнований и фрагментации кучи резко и была полностью прозрачна для остальной части кода.

3
ответ дан 4 December 2019 в 11:41
поделиться

Некоторые причины перегрузки оператора New

  1. отслеживания и профилирование памяти, и для обнаружения утечек памяти
  2. для создания пулов объекта (скажем, для системы частиц) для оптимизации использования памяти
3
ответ дан 4 December 2019 в 11:41
поделиться

Вы делаете это в случаях, когда вы хотите контролировать распределение памяти для некоторых объектов. Как будто у вас есть небольшие объекты, которые будут выделены только на куче, вы могли бы выделить пространство для объектов 1K и использовать новый оператор для первого выделения 1K объектов сначала и использовать пространство, пока не используется.

0
ответ дан 4 December 2019 в 11:41
поделиться

Я бы сохранил их в том же каталоге. Это просто кажется легче мне, по крайней мере это - способ, которым я всегда делаю это.

-121--3518786-

Требуется добавить элемент наложения . В руководстве Google Mapview показано, как его использовать.

-121--3348387-

Некоторые причины перегрузки по классу
1. Инструментарий, т.е. отслеживание распределений, аудит следов вызывающего абонента, таких как файл, строка, стек.
2. Оптимизированные процедуры распределения, т.е. пулы памяти, фиксированные блочные распределители.
3. Специализированные распределители, т.е. смежный распределитель для объектов «распределить один раз при запуске» - часто используется в играх программирования для памяти, которая должна сохраняться для всей игры и т.д.
4. Выравнивание. Это большое значение для большинства систем, не являющихся настольными, особенно для игровых консолей, для которых часто требуется выделение, например, на 16-байтовых границах
5. Специализированные хранилища памяти (опять же в основном не настольные системы), такие как не кэшируемая память или не локальная память

12
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: