Главная страница
    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.032 c
4-1106855808
Gero
2005-01-27 22:56
2005.03.13
Предел размера буфера консоли


1-1109266347
ki11er
2005-02-24 20:32
2005.03.13
TShockwaveFlash и интерфейсы ....


3-1107960357
denis24
2005-02-09 17:45
2005.03.13
Связанные таблицы


14-1109100368
Verg
2005-02-22 22:26
2005.03.13
С праздничком :)


6-1104758781
Zaur
2005-01-03 16:26
2005.03.13
TWebBrowser как Opera...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский