звучит как вопрос викторины ...
быстрее и компактнее Распределение
Наиболее распространенной причиной является много мелких объектов, которые необходимо распределить динамически. Пользовательский распределитель для объектов с фиксированным размером имеет гораздо меньшие накладные расходы, чем общий распределитель, не страдает от фрагментации и, как правило, быстрее. (Кроме того, когда эти выделения удаляются из основной кучи, они больше не способствуют фрагментации основной кучи).
Similary - освобождающий распределитель (где вы можете выделить несколько объектов, но не можете их освобождать вместе, только в соединении) является самой быстрой схемой размещения и не имеет каких-либо накладных расходов (кроме выравнивания в нескольких редкие случаи). Это имеет смысл, если вы создаете структуру данных, которую вы никогда не изменяете, только удаляете в целом.
Другое основание Распределитель
Еще одно приложение выделяет из другой кучи, чем в куче C++. Возможно, данные в объектах должны быть выделены в общей памяти для обмена с другими процессами или должны быть переданы системной функции, которая берет на себя ответственность и требует использования определенного распределителя. (Обратите внимание, что для этого требуется реализовать тот же механизм для всех под-объектов, также нет общего способа достижения этого).
Similary (где я его использую) - это когда вы создаете код на лету. В настоящее время вам необходимо сообщить операционной системе, что данные на этой странице памяти разрешены для запуска, но вы получаете эту память в довольно больших кусках (например, 4K). Итак, снова запросите страницу (4K) из ОС с правами выполнения, затем выделите на нее множество небольших объектов - с помощью размещения new.
Abhay, Тема, которую вы предоставили, обсуждает вопрос о необходимости размещения новых, мой вопрос в том, почему можно было бы обеспечить его собственную реализацию вместо использования по умолчанию? – Learner
@learner: Нет ничего лучше, чем размещение по умолчанию. Программист должен указать один, и причины указаны там. То, что это обычно делается на основе класса, является проблемой дизайна, где вам нужно быть осторожным с семантикой копирования (см. Coding Standards Standards - Item 45, by Sutter and Alexandrescu). – Abhay
@Abhay: следующий код работает, даже если мой класс donot реализует размещение new char arr [100]; abc * pt = new (& arr) abc; Итак, я интерпретирую, есть ли место по умолчанию для размещения по умолчанию, правильно? В классе мы можем предоставить свою собственную версию, мой вопрос в том, что является прецедентом для этого? что нужно делать другим, а затем возвращать тот же самый указатель, который передается? Есть ли какой-нибудь полезный пример/сценарий, с которым вы столкнулись? – Learner