![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Спасибо что потрудились прочитать...
Кто знает как происходит выделение динамической памяти? Столкнулся с тем, что программа должна обрабатывать большие обьемы информации. Эту информацию просто невозможно разместить в оперативной памяти целиком . Поэтому происходит переодическая, по необходимости, загрузка с диска и сохранение тудаже. Только зараннее неизвесно какие обьемы информации загружаются, и сколько она будет находится в памяти (определяется при выполнении программы) Упрщенно суть выделениея и освобождения памяти можно показать следующим кодом
Теперь к сути вопроса Имеет ли смысл освобождать выделенную под указатели память? Действительно ли она будет освобождатся, и будет ли она доступна для последующего использования? Насколько я понимаю, память высвобождается сплошным куском от некоторой точки (от уже выделенной памяти) при этом высвобожденная моей программой память будет анологична "дыркам в заборе", а выделение памяти по новой будет происходить с "края забора" И таким образом высвобожденная память вновь использоватся небудет. Кто знает, подскажите пожалуйста. Спасибо -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Alkash |
|
|||
|
коллекционер жизни ![]() ![]() Профиль Группа: Участник Сообщений: 516 Регистрация: 5.7.2004 Где: / Репутация: нет Всего: нет |
[url=http://softwarer.ru/memory.html]Вот статейка...[/url ]Изучай)
-------------------- Подпись >> /dev/null |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
К сожалению это совсем не то, что мне надо. Ничего нового для себя я не узнал. Меня интересует, как происходит выделение памяти "на самом деле", а не какими подпрограммами это выделение реализуется. Память имеет реальную физическую основу - микросхема DDR или область диска для файла подкачки. И при всем нашем желании мы не можем вырезать свободный кусок из средины и добавить его в конец. Где-то должна сохранятся информация о том - с какого адреса начинается свободный кусок памяти и его длинна. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
Если мне не изменяет память (которая в голове), память (которая в микросхемах) может при необходимости перераспределяться ОС.
Вопрос такой, а насколько велики структуры данных записанные в обрабатываемых файлах? И не потоковая ли обработка, так что можно выделить с запасом например метр и в него все грузить. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
В том все и дело, что объмы загружаемой информации велики (до десятков мегабайт на один элемент массива), и освобождение динамической памяти необходимо для разгрузки системы. Загруженные в указатели массива структуры могут обрабатыватся как поочереди так и паралельно. По окончании обработки одного элемента определяется один или несколько элементов для последующей обработки(определяются в виде индексов массива). Плсле чего происходит проверка if m[ind]=nil then [Выделить под m[ind] память и загрузить с диска ]; далее начинается обработка m[ind] а элемет обрабатываемый до этого, если необходимость в нем отпала, сохраняется на диск до востребования, а выделенная под него память освобождается. В общем виде программу можно представить в виде нескольких потоков (их число меняется в ходе выполнения программы) последовательно переходящих от обработки одного элемента к другому. Причем каждый поток обрабатывает в текущий момент только один "свой" элемент. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |