Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Расход памяти   Найти похожие ветки 

 
jmi2k   (2006-10-26 17:26) [0]

Есть структура
 TMyItem = record
   FNameLength: Word;
   FName: string;
   FFlags1: Word;
   FFlags2: Word;
   FFlagsType: Word;
 end;
 
 TMyBigItem = record
   FInternalValue: Byte;
   FFeedBagItems: array of TMyItem;
   FNumber: DWord;      
 end;


И начинаю я в один момент заполнять структуру типа TMyBigItem, при этом расход памяти возрастает раза в три. Что такое?

И чем можно отследить поэтапное выделение памяти по каждой инструкции.


 
Сергей М. ©   (2006-10-26 17:29) [1]


> раза в три. Что такое?
>


А ты, надо понимать. ожидал "раза в два" ...)


 
Desdechado ©   (2006-10-26 17:40) [2]

Ну, если ты заполняешь структуру с динамичиским массивом, сожержащим динамические строки, то памыть может поедаться ровно столько, сколько твой аппетит и ограничения системы позволят.


 
jmi2k   (2006-10-26 17:41) [3]

Какая разница сколько я ожидал. Я ожидал что расход памяти увеличится ~пропорционально объему данных записанных в MyBigItem.


 
Anatoly Podgoretsky ©   (2006-10-26 17:43) [4]


> Я ожидал что расход памяти увеличится ~пропорционально объему
> данных записанных в MyBigItem.

Для этого нет ни каких реальных оснований.


 
jmi2k   (2006-10-26 17:46) [5]

А каким образом организовать структуру с динамическим массивом структуры с динамическими строками, но с меньшим расходом памяти?


 
DrPass ©   (2006-10-26 17:48) [6]


> Я ожидал что расход памяти увеличится ~пропорционально объему
> данных записанных в MyBigItem.

Нет. Во-первых, менеджер памяти забирает память "с запасом". Во-вторых, при изменении длины динамического массива, AFAIK, создается новый массив, и в него копируются данные из старого, а потом старый уничтожается. В-третьих, такие многократные перетурбации приводят к дефрагментации выделенной памяти и соответственно к неэффективному ее использованию. Небось, вызываешь SetLength перед добавлением каждого нового элемента?


 
jmi2k   (2006-10-26 17:52) [7]


> Небось, вызываешь SetLength перед добавлением каждого нового
> элемента?
>

ага


 
DrPass ©   (2006-10-26 17:54) [8]


> дефрагментации

я имел в виду фрагментации :) но все ведь поняли, что я имел, ага?


 
Anatoly Podgoretsky ©   (2006-10-26 17:57) [9]


> А каким образом организовать структуру с динамическим массивом
> структуры с динамическими строками, но с меньшим расходом
> памяти?

Написать свой диспетчер памяти


 
Sapersky   (2006-10-26 18:11) [10]

при изменении длины динамического массива, AFAIK, создается новый массив, и в него копируются данные из старого

В том случае если счётчик ссылок > 1, иначе этот вопрос отдается на откуп ReAllocMem, про которую в help"е сказано "If the block cannot be reallocated in place, it is moved to a new location in the heap, and P is updated accordingly", т.е. может быть in place (хотя не знаю насколько часто, не проверял).

2 jmi2k:
Перевыделять по одному элементу в любом случае не стоит. Лучше блоками по нескольку сразу. Например, для небольших объёмов - в 2 раза больше чем было, для больших - в 1.5, 1.25 и т.п. Можно "скопипастить" из TList.Grow. Можно просто использовать TList.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.046 c
2-1161863963
Fostr
2006-10-26 15:59
2006.11.12
Динамическое создание компонента


1-1159106424
fs_more
2006-09-24 18:00
2006.11.12
Передача данных в сообщении (SendMessage / PostMessage)


4-1151488495
Sergey__
2006-06-28 13:54
2006.11.12
Проблема при работе с СОМ-портом


15-1161983461
unknown
2006-10-28 01:11
2006.11.12
Clawfinger


2-1161841458
pkm
2006-10-26 09:44
2006.11.12
Путь к файлу.





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