Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Память, занимаемая массивом, содержащим дин. массивы.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
9-1102850191
DeadMeat
2004-12-12 14:16
2005.03.13
Цена моделей


8-1101375728
Дмитрий Ботвин
2004-11-25 12:42
2005.03.13
Объемный текст


14-1108977953
gfd
2005-02-21 12:25
2005.03.13
Где создать форум?


3-1107869990
denis24
2005-02-08 16:39
2005.03.13
select ..... from .... where name in (........


14-1108879176
begin...end
2005-02-20 08:59
2005.03.13
С Днём рождения! 20 февраля