Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
4-1106860078
Unknown
2005-01-28 00:07
2005.03.13
Окно сзади


14-1109112984
Александр грифин
2005-02-23 01:56
2005.03.13
Требуется программист для реализации проекта


1-1109503092
Denya
2005-02-27 14:18
2005.03.13
OnResize


6-1104768642
Sergey77
2005-01-03 19:10
2005.03.13
Частота обновления информации касательно подсчета трафика


9-1103448218
Goldseeker
2004-12-19 12:23
2005.03.13
Классы?




   Наверх