Как хранится размер области, выделенный malloc()?

Код:

int* ptr;
ptr = (int *)malloc(10 * sizeof(int));
free(ptr);


Пусть INT - это 4 байта.
Собственно, вопрос: как free узнаёт, что надо освободить именно 40 байт, а не 4?
В указателе помимо адреса ячейки памяти, типа данных (т.е. сколько байт от ячейки) еще хранится и количество ячеек?

Мне встречаются источники, где утверждается, что переменная-указатель в 32-битной занимает 4 байта. Т.е. там может хранится только адрес ячейки. А где же тогда тип и, тем более количество ячеек, если это возврат из malloc?
  • Вопрос задан
  • 564 просмотра
Решения вопроса 1
@MiiNiPaa
Зависит от компилятора и платформы.
Часто выделяется больше памяти чем нужно (скажем 44 байта) и в первых байтах пишется размер области памяти, пользователю возвращается, скажем память+4. То есть размер памяти хранится перед буфером отданым пользователю.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега C++
Баянист. Тамада. Услуги.
Ответ простой - вам не нужно использовать malloc на С++. Используйте new.
А если используете, вам не нужно знать, где он хранит размеры.
Ответ написан
SerJook
@SerJook
кодер
Как в паскале строки первый байт это длина
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы