Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизПамять, занимаемая массивом, содержащим дин. массивы. Найти похожие ветки
← →
Fenik (2005-02-24 20:48) [0]Есть динамический массив A: array of TRecord;
Можно ли определить число байт занимаемое им в памяти, не проходя циклом по массиву? И будет ли это быстрее и надежнее чем вариант с циклом?
type
TDataPoint = packed record
X: Word;
Y: Word;
end;
TRecord = packed record
DataType: TDataType; // тип снимаемых данных
FibreType: TFibreType; // тип волокна
GrindDegree: Byte; // степень помола, °ШР
Concentration: Single; // концентрация, %
Height: Word; // высота внутреннего цилиндра, мм
InternalRadius: Word; // внутренний радиус внешнего цилиндра, мм
ExternalRadius: Word; // внешний радиус внутреннего цилиндра, мм
Commentary: string; // комментарий
DataPoint: array of TDataPoint;
AproximatePoint: array of TDataPoint;
end;
← →
Anton_K © (2005-02-24 20:51) [1]
var A:array of TRecord;
Size:Cardinal;
...
Size:=SizeOf(A)
...
← →
begin...end © (2005-02-24 20:51) [2]> Fenik (24.02.05 20:48)
Размер переменной типа TRecord не зависит от количества элементов в поле-массиве TRecord.DataPoint.
> Есть динамический массив A: array of TRecord;
> Можно ли определить число байт занимаемое им в памяти,
> не проходя циклом по массиву?
Можно. BytesCount := Length(A) * SizeOf(TRecord). Для уверенности объявите A как packed array.
← →
Anton_K © (2005-02-24 20:52) [3]Эээ... да, что-то я не то сказал... извиняюсь.
← →
begin...end © (2005-02-24 20:53) [4]Примечание: разумеется, в [2] я имел в виду суммарный объём памяти, занимаемый элементами массива A. Размер самой переменной массива A равен 4 байтам.
← →
Fenik (2005-02-24 21:01) [5]>begin...end © (24.02.05 20:51) [2]
Мне нужен объем массива плюс объемы всех подмассивов.
Т.е. если массив A со всеми данными записать в файл, сколько памяти он займет.
← →
DiamondShark © (2005-02-24 21:03) [6]Тогда только проходясь по всем элементам.
← →
Fenik (2005-02-24 21:05) [7]> DiamondShark © (24.02.05 21:03) [6]
> Тогда только проходясь по всем элементам.
Ясно.
Спасибо.
← →
begin...end © (2005-02-24 21:07) [8]> Fenik (24.02.05 21:01) [5]
> Мне нужен объем массива плюс объемы всех подмассивов.
Тогда найдите размер каждого подмассива (см. [2]) и просуммируйте их.
> Т.е. если массив A со всеми данными записать в файл,
> сколько памяти он займет.
Такой массив в файл Вы просто так не запишете. Придётся для каждого элемента отдельно записывать каждое поле так, как этого хотите Вы. Более того - в TRecord есть также string-поле - с ним как быть? Ведь оно тоже занимает 4 байта.
← →
Fenik (2005-02-24 21:21) [9]>begin...end © (24.02.05 21:07) [8]
С записью в файл и чтением из него проблем нет. Думал, может быть существует метод быстрого определения размера, которое будет занимать файл. Но, как я понял, такого метода нет, и придется оставить старый вариант с перебором всех элементов A.
Спасибо за помощь. )
← →
Anatoly Podgoretsky © (2005-02-24 21:39) [10]Без цикла здесь ни как, хорошо что еще рекурсивных структур нет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c