Андрій Новосьолов (andrzejn) wrote,
Андрій Новосьолов
andrzejn

640K хватит всем

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

Те из нас, кто ещё программировали под DOS, помнят проблемы с выделением больших фрагментов памяти: всего-то свободной памяти может быть достаточно, но непрерывного свободного участка - нету, и всё. Выкручивались из этой проблемы кто как умел.

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

Но люди же не удовлетворяются достигнутым - они начинают подсовывать палки под всё более тяжёлые камни, пока снова спина не затрещит от натуги. У нас много свободной памяти? Отлично, загрузим в неё побольше данных! И вот уже 2G физической памяти в рабочих станциях - совсем не редкость, а это уже близко к 4G пределу виртуального адресного пространства. И проблемы фрагментации полезли снова.

Ведь с таким количеством памяти очень неудобно работать на уровне 4K страниц. Поэтому приложения обзавелись собственными менеджерами памяти, которые распределяют полученную от системы память на кусочки поменьше или побольше. И - да, если свободной памяти вообще-то хватает, но непрерывного куска нужного размера нету, то...

Справились и с этим.

Visual Studio .NET 2005 - сама по себе .NET приложение. Это значит, что у неё умный менеджер памяти со сборкой мусора. Если не хватает непрерывного участка памяти - он передвинет занятые участки, если не хватает памяти совсем - попросит у системы ещё и добавит к адресному пространству.

Но. Этот умный менеджер памяти работает поверх обычного менеджера памяти 32-битного Windows приложения, и просит дополнительные страницы не напрямую у системы, а у промежуточного менеджера.

И получается парадоксальная ситуация: VS.NET съела уже 800M памяти, ещё 600M свободны - а Visual Studio уже жалуется на нехватку памяти и отказывается работать с большим проектом.

VS.NET 2005 - глюкавое чучело.
Subscribe

  • О жизни, Вселенной и обо всём

    Размышлял о своём мировоззрении и его особенностях. Например, в нём загадочным образом сочетаются уважение к конкретным людям и мнение, что 90%…

  • Whisky Galore!

    "Whisky Galore!" – фильм 1949 г. (с римейком в 2016), по книге 1947 года, по новелле 1943 года, по реальным событиям 1941 года. События…

  • Тревожный окситоцин

    На этой неделе я узнал о парадоксальном действии окситоцина. Его считают "гормоном отношений", усиливающим привязанность между партнёрами,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 7 comments