Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
ВнизSizeOf для массивов более 32к Найти похожие ветки
← →
Alex_C (2008-01-21 15:40) [0]Есть массив
Buffer : ^TByteArray;
...
GetMem( Buffer, 36000 );
Если потом сделать
SizeOf(Buffer^), то рез-т получается не 36000, а 32768. А как получить реальный размер буффера?
← →
Юрий Зотов © (2008-01-21 15:44) [1]Что такое у Вас TByteArray? Если динамический массив, то выкиньте все указатели и GetMem"ы. Динамический массив сам по себе - уже указатель, а память под него выделяется через SetLength.
← →
Leonid Troyanovsky © (2008-01-21 15:47) [2]
> Alex_C (21.01.08 15:40)
> А как получить реальный размер буффера?
Он и есть реальный:
TByteArray = array[0..32767] of Byte;
--
Regards, LVT.
← →
han_malign © (2008-01-21 16:08) [3]SizeOf - это константа вычисляемая на этапе компиляции - в данном случае SizeOf(Buffer^) идентично SizeOf(TByteArray).
Если не хочешь пользоваться динамическими массивами, то реальный размер буфера ты "получаешь" в момент выделения памяти и его храние целиком твоя обязанность...
Можно получить выделенный размер буфера (округленный с точностью 4-байта) зная особенности реализации Borland менеджера памяти, но это есть нехорошо - т.к. не гарантируются совместимость с новыми версиями компилятора, и должна быть уверенность что указатель указывает строго на начало выделенного блока...
Можно пользоваться кучей Windows, которая поддерживает проверку целостности - HeapAlloc/HeapFree/HeapSize/HeapXXX - но это извращение т.к. менеджер памяти Borland намного эффективнее.
← →
homm © (2008-01-21 16:16) [4]> [3] han_malign © (21.01.08 16:08)
> то реальный размер буфера ты "получаешь" в момент выделения
> памяти и его храние целиком твоя обязанность...
Не совсем так. По смещению -4 от начала выделеного блока, кажется, лежит размер блока.
> Можно получить выделенный размер буфера (округленный с точностью
> 4-байта)
Видимо мы об одном и том же. Только я ничего не помню, про кртность читырем.
← →
Alex_C (2008-01-21 16:40) [5]Спасибо всем!
Свою ошибку понял. Перешел на динамический массив.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.047 c