Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2010, 20:29   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Алекс, так или иначе нужно где-то хранить данные о том что свободно или нет, можно конечно хранить данные единым блоком(монолит), но рано или поздно он начнет дробится.

почитай http://sasm.narod.ru/docs/pm/pm_mem/chap_7.htm второй пример там(там правда про другую память но смысл тот же)

чтото не нравится, то выдели себе свой блок большой и расходуй как хочешь
посмотрим как ты хранить будешь

Цитата:
Если бы я был в группе разработки Windows
в Лине тот же принцип, от него не уйти(см первую строчку)

далее, менагер кучи и менагер памяти немного разные понятия, куча итак монолит поидее(см третий абзац, такой же блок как я предлагаю)
менагер кучи хранит в ней же инфу о её состоянии.
а менагер памяти, обычно вне процесса, но все равно расход есть.

хм, дефрагментация...а когда её проводить?
самое оптимальное это чтоб сам процесс в свободное время, но а если его не будет?

а почему PInteger сразу? может простой pointer/void*?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 11.09.2010 в 20:31.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.09.2010, 20:29   #12
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Цитата:
Сообщение от russian-stalker Посмотреть сообщение
Да, видимо так. Помнится, проводил опыт и выяснил, что после удаления объекта память не отчищается, а лишь помечается как свободная.
Всё правильно, зачем её очищать? Лишняя и бесполезная трата времени.

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Хранить все данные подряд, отдельно храня только Integer указатель на первый свободный байт. При освобождении "внутреннего" участка памяти перемещать данные как при дефрагментации. Чтобы не сильно тормозить весь процесс использования ЭВМ - либо делать это в случае необходимости, "временно" оставляя "пробелы" - освобожденные куски памяти, еще не занятые ничем, либо разделить память на "блоки" - например $000000 - $400000, $400001 - $800000, $800001 - $B00000, $B00001 - $FFFFFF и хранить указатель отдельно для каждого блока.

Если мне дадут больше времени - я придумаю, как улучшить данный метод. Но это никому не нужно, потому, что система уже существует, пусть и не в самом оптимальном виде. Не мне её менять.
Дефрагментация памяти - ты шутишь? жуткие тормоза при удалении чего-угодно.
Оставлять дефрагментацию на потом: Ага. Допустим, мы имеем 1 Гб памяти. Мы запустили приложения A, B и C, каждое из которых съело по 300 мб памяти. Затем мы закрыли приложение B и открыли приложение D, которое требует так же 300 мб. Но, о ужас, у нас не хватает памяти))) Ведь мы решили "оставить пробелы")))

Кстати, если ты хочешь откладывать дефрагментацию "на потом", необходимо где-то хранить информацию об адресах и размерах "оставленных пробелов".

Деление на блоки: так память и так сама по себе делится на блоки во всех алокаторах, только на блоки нефиксированного размера, да и хранить указатель для каждого блока, как это предлагаешь делать ты - глупо.

Кстати говоря, даже в описанной тобой примитивной реализации необходимо хранить кучу информации об организации памяти (указатель для каждого блока + указатели и размеры на оставленные пробелы). Молодец, придумал систему худшую, чем существующая)

PS.
Категорически рекомендую не умничать, и не называть разработки других людей "тупой системой", не ознакомившись с вопросом.

Прочти для примера "Внутреннее устройство Windows" Руссиновича и "Ядро Linux" Бовета и Чезати

Последний раз редактировалось kogemrka; 11.09.2010 в 20:36.
kogemrka вне форума Ответить с цитированием
Старый 11.09.2010, 20:45   #13
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Пепел Феникса
Извини, не видел твоего сообщения, когда отправлял своё, вышло так, что написали почти одновременно

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
чтото не нравится, то выдели себе свой блок большой и расходуй как хочешь
Кстати говоря, иногда так и приходится делать, когда стандартный аллокатор не устраивает по той или иной причине. Например в box2d (физ. движок для 2d игр) есть свой аллокатор SOA (small object allocator) заточенный на выделение памяти для большого числа маленьких объектов.
kogemrka вне форума Ответить с цитированием
Старый 11.09.2010, 20:48   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

извинятся не за что

у нас программистов, чаще есть шанс изменить то что не нравится
(не зря ж занимаюсь разработкой своего ЯП)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.09.2010, 21:55   #15
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://wm-help.net/books-online/book/59464/59464-8.html
http://www.transl-gunsmoker.ru/2009/09/blog-post.html
http://www.gunsmoker.ru/2009/01/blog-post.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели. Динамическая память. Kazik Помощь студентам 2 18.01.2014 00:17
Указатели.Динамическая память Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 6 12.06.2010 10:08
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39
C,символы, указатели, динам.память ertar Общие вопросы C/C++ 6 24.12.2008 21:05