Мне было интересно, как delete[]
знает размер динамически распределенного массива, и я нашел этот вопрос (а также этот вопрос на форуме Microsoft, но ответаналогичный).Получается, что ответ равен
Обычно он хранится в «головном» сегменте непосредственно перед выделением памяти.
Таким образом,точные детали зависят от реализации.
В этом ответе один из комментариев спрашивает, почему эта весьма полезная часть информации недоступна для программистов, что вынуждает нас передавать переменные, обозначающие размер.Ответ, полученный на комментарий:
Заставить распределитель сохранять запрошенный размер (чтобы вам не нужно было передавать размер массива самостоятельно) может быть небольшим препятствием, но это может повлиять на производительностьна мыслимых конструкциях распределителя
Для меня это не очень убедительно, учитывая, что размер в любом случае должен быть доступен для delete[]
.
Мой вопрос: возможно ли (для программиста) каким-то образом получить размер?
Я знаю, что есть особый способ Microsoft (как было отмечено на вышеупомянутом форуме MS), но я после чего-то стандартизировал.
Вы можете использовать специфическую для Microsoft функцию _msize (), чтобы получить размер динамически размещаемого массива из указателя, даже если он передается другой функции, отличной от той, которая выполняла распределение.