КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |