Код: Выделить всё
char* a = new char[24];
char* b = new char;
printf("a = %p\n", a);
printf("b = %p\n", b);
size_t n = *(size_t*)(a-8);
printf("%zu\n", n); // also tried different format specifier, output is always 33
Код: Выделить всё
a = 0x7d7c2c0
b = 0x7d7c2e0
33
Изменить:
Как указывали другие, не гарантируется, что последовательное выделение памяти размещается в последовательных блоках памяти (и все блоки памяти имеют минимальный размер), но я заметил, что при увеличении до размера 25 количество байт между обоими указателями char становится 48, а с размером 41 разница становится 64 и так далее... .
Также я заметил, что n постоянно соответствует разнице адресов +1. Вроде бы он соответствует размеру блока памяти, но я все еще спрашиваю себя, почему размер блока + 1, а не количество элементов?
А также при использовании нетривиального деконструируемого типа (структура с указателем) разница a и b всегда имеет 8 дополнительных байтов (или 4 на 32-битной архитектуре).
Подробнее здесь: https://stackoverflow.com/questions/798 ... mory-block
Мобильная версия