Сообщение от .Squid
Зачем знать, сколько байт было отведено под хранение определенных данных? Я имею в виду, с учетом накладных расходов. А чистый объем хранимых данных можно и вручную посчитать.
Еще вот http://habrahabr.ru/company/abbyy/blog/117208/
Может наведет на какие-то мысли.
|
Странно - как я тогда проглядел этот пост?
Вот ещё:
http://www.hardforum.ru/t72258/#post497092
long *asdf;
asdf=(long*)malloc(1000);
asdf[-4] - указывает на размер текущего массива в байтах (в Debug -моде, в релизе может быть по другому)
asdf[-8] - адрес предыдущего массива
asdf[-2]
asdf[-3] - тоже что-то значат
http://forum.codenet.ru/q72668/Что+з...+массивом% 3F
int *ptr_int = new int[10];
for (int i=-4; i<=-1; i++)
cout << *(ptr_int + i) << " ";
Вывод: 40 1 333 -33686019
40 - это размер массива в байтах в Windows.
http://www.linux.org.ru/forum/development/2849473
менеджер памяти хранит служебную информацию о блоках памяти обычно в служебном мини-блоке, перед самим блоком, обычно это 16 байт (на 32х битных машинах), содержащие размер распределенного блока памяти, а так-же указатели на кучу, и на следующий/предыдущий элементы. Таким образом, при вызове free(ptr), функция free вычисляет смещение ptr-16 байт, и по этому адресу пытается найти служебную информацию, относящуюся к распределению памяти в куче.
|
http://hashcode.ru/questions/95558/о...массивами-от-c
//for(int i=0;i<sz;i++); нет, это не наш метод, обойдемся без sz
for(int i=0;i<*(((int*)pa)-1);i++);//совсем другое дело
Вывод: информация хранится в блоке перед выделенной пользователю памятью. Система хранения зависит от "всего" (не фиксируется стандартом языка, что логично), поэтому привязывать к такому решению код - грязнющий хак.
Для своей версии MinGW я так и не написал парсер (в целях самообразования).