Показать сообщение отдельно
Старый 26.02.2014, 02:03   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Выделение памяти

Сообщение от .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 я так и не написал парсер (в целях самообразования).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Жека (26.02.2014)