Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1108729743
Adder
2005-02-18 15:29
2005.03.13
Надоело платить штрафы за превышение скорости?!


14-1108882090
SOFS
2005-02-20 09:48
2005.03.13
Какие языки програмрования будут востребованы в будущем?


14-1109041831
ЮЮ
2005-02-22 06:10
2005.03.13
Всех мужчин с наступающим !!!


9-1102850191
DeadMeat
2004-12-12 14:16
2005.03.13
Цена моделей


3-1108016064
Киря
2005-02-10 09:14
2005.03.13
Как передать данный из DLL в exe?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский