Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ссылочный менеджер памяти

 

Когда программист хочет освободить память, он указывает адрес. Если адрес есть в списке, то блок уничтожится. Если адреса нет, то действие произошло ошибочно, ничего не произойдет. Если мы взяли тот адрес и размер из служебной таблицы и теперь этот блок считается пустым

Проблемы:

· При поиске расположения блока нужно пробежаться по ВСЕМ адресам
Решение: либо строим блоки на указателях
Выделение памяти в списочном менеджере памяти – медленно. Удаление медленно – нужно просмотреть все блоки.

· Менеджеру проще работать с объектами одинакового размера. Дикая фрагментация.
Если объекты разные, то надо найти оптимальное место (поменьше)

o Для этого нужна дополнительная битовая карта, по ней менеджер будет искать маску (неоптимальное выделение памяти)

o Пустые места также на указателях (просто долго)

Такие менеджеры памяти считаются наихудшими. Они не оптимальны и медленны (из-за просмотра всех структур данных).

Оптимизация: переход от списка к дереву.

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

Если нам нужно выделять быстро блоки памяти – стековый. Если быстро освобождать блоки памяти – стековый.

Именно поэтому не следует переменные короткоживущие выделять динамически, их можно реализовать на стеке.

Списочный и стековый менеджеры памяти (МП) обладает следующими характеристиками:

В стеке можно переменные закэшировать в кэше 1 уровня (они находятся рядом). В списочном режиме переменные будут размазаны по ОЗУ и уже кэшем 1 уровня не отделаешься.

Стековому МП нужно 4 байта для служебных нужд (указатель адреса).
Списочному МП нужно намного больше служебных данных, где хранятся адреса переменных и т.д.

В результате списочного МП много проблем, только 1 плюс:
динамическое выделение памяти.

Также есть особенность обоих МП:
переменная после выделения остается под этим виртуальным адресом, НАВСЕГДА. Если в языке программирования существует обращение к любой ячейке памяти, то это значит, что переменные пришиты к своим адресам (их нельзя двигать).

Когда используется МП такого типа, это означает следующее: у меня где-то есть переменная-указатель, у меня есть МП, у него служебные данные и память. Я выделяю в памяти какую-то ячейку. Информация о ней хранится в МП. После этого МП передаёт для нас информацию в виде прямого адреса к конкретной ячейке. Если мы скопируем указатель, то будет дитё двух нянек.

Когда у нас есть множество элементов контроля за данными, они обязательно нагадят друг другу (нет кооперации).

В бородатых 70-х…

Задача уровня дебильности 70-х не решается. Как люди пишут программы на 1,000,000 строк? Они все входят в клуб мазохистов!

Эти переменные-указатели разлетелись по разным кускам программного кода, по разным программистам, которые работают в разных потоках. Если один программист сдуру дал команду delete, то происходит хрень. Тот, кто удалил переменную, записал туда другую, а остальные няньки считают, что там хранится их любимая переменная. Если чтение, то лажают остальные няньки, если запись, мы перетираем новую переменную.

Программисты ссут использовать оператор delete, поэтому они затирают указатели, что приводит к утечкам памяти. Перекрестное изнасилование переменных намного хуже утечек памяти.

С этими проблемами борются следующими способами:

1. Прикручивают навороты, заменяют стандартные блоки нестандартными (который тупит со страшной силой), но выявляет эти две проблемы.
Если этот песочный извращенный менеджер прогнал это все, не факт, что все обнаружилось, потому что он не настолько извращённый.

2. Запретить программисту память чистить вообще! Это будет означать, что программист создавать переменные может, а удалять не может. Удалять будет специальный программный интеллектуальный комплекс, называемый сборщик мусора. В языке LISP реализован было 30 лет назад.

Сборщики мусора (вопрос модуля и экзамена)

<== предыдущая лекция | следующая лекция ==>
Стековый менеджер памяти | Сборщики мусора с учетом используемости переменных
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 612; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.