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