Как make_shared выделяет одну динамическую память для объекта менеджера и управляемого объекта

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

1 ответ

Решение

make_shared сделает динамическое выделение памяти динамически

Обратите внимание, что это не требуется стандартом. Это возможно, и хорошие реализации делают это.

Как это можно сделать?

Например, это может быть реализовано путем выделения неинициализированного блока памяти, который достаточно большой, чтобы содержать как блок управления, так и заостренный объект, принимая во внимание их требование выравнивания, а затем сконструировать каждый из двух объектов, используя новое размещение. std::malloc может использоваться для выделения памяти. Это несколько похоже на то, как std::vector::reserve может выделить блок памяти, где впоследствии могут быть построены несколько объектов.

Другие вопросы по тегам