2013-04-30 3 views
9

Это подмножество a previous question.Какие алгоритмы управления памятью используются основными поставщиками компиляторов?

В качестве упражнения я пишу менеджер памяти - (. Или новые и удалять), то есть код, который реализует таНос, перераспределить и бесплатно RTL для моего языка, Delphi, allows the RTL's memory manager to be replaced easily. Для тех из вас, кто использует C++, это похоже на, но более низкого уровня, чем переопределение новых и удаленных (он перехватывает сам RTL, а не язык).

Я ищу ресурсы, подходы к качеству, к которым другие относятся к одной и той же проблеме, и пытаюсь выяснить, какие алгоритмы используют другие крупные производители компиляторов. В то время как Delphi хорошо документирован, я не могу найти никакой информации о реализациях, используемых MS VC++, .NET или Objective C. Эти поставщики не кажутся (?), Чтобы позволить их RTL подключаться, как это делает Delphi. Все документы выглядят более высокоуровневыми, например NSAutoReleasePool, чтобы выбрать случайный пример - слишком высокий уровень для этого вопроса.

Какие алгоритмы управления памятью используют основные поставщики (Microsoft VC++ и .Net и Apple Objective C) в своих библиотеках времени выполнения?

Пример большого ответа был бы документ, описывающая реализацию менеджера памяти, такие как this one, или ссылка на опубликованную бумагу. Примером полезным является ответ - алгоритм: «Время выполнения VC++ использует the Hoard allocator».

+0

Вау ... но управление памятью настолько сложное, что это животное - оно распространено на уровнях многих-многих-многих. Например, с Delphi: FastMM4 реализует три алгоритма в зависимости от размера блока. Но помимо этого есть RTL, который реализует управление памятью с резервным копированием + refcounting для dyn-массивов и строк. Затем есть классы TComponent и TObjectList, которые реализуют атрибуты Owner-Items algorythm, а затем снова возвращается TInterfaceObject для повторного подсчета ... И все эти алгоритмы управления памятью ARE. И все эти алгоритмы вместе реализуют СТРАТЕГИЮ данного HMMgr + Language + RTL –

+2

+1, это довольно интересный вопрос, если только для академических целей :-) –

+1

С такими языками на основе GC, как .Net, JVM и снова ObjC, быть разными ожиданиями и разными алгоритмами в диспетчере памяти, в зависимости от того, какая информация может (или не может) Memory Manager надежно получить от языка. Просто прочитайте содержимое http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) –

ответ

1

Объектив-C использует автоматический подсчет ссылок (ARC). Он включен с iOS5. У Apple есть патент США 20030196063 «Прозрачная система управления локальной и распределенной памятью».

Java использует сложную схему сбора мусора, которая развивалась на протяжении многих лет. См. «Настройка коллекции мусора с виртуальной машиной 5.0 Java [tm]» http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

+0

Здесь вы описываете управление жизненным циклом объекта, а не распределение памяти. Распределение памяти является более низким уровнем - это код, который выполняется для выделения памяти при создании объекта, например. –