Свободная память


Содержание

Свободная память пк

Вводится одномерный массив

У меня есть такой пункт:

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

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

01.05.2013, 15:07

Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена
При добавлении dataGridView(Visual Studio 2010) выдает ошибку «Попытка чтения или записи в.

Свободная память в outlook
Всем привет.Подскажите пожалуйста, как посмотреть сколько осталось свободного места в outlook?

Свободная виртуальная память заканчивается
Когда запущена тяжелая игра и одновременно ещё что-то тяжелое, например, 3Ds MAX, часто из трея.

Пропадает вся свободная память на диске С
На компьютере стала пропадать вся свободная память на диске С. Сначала я просканировал диск Nod32.

Свободная память

Дата добавления: 2015-06-12 ; просмотров: 339 ; Нарушение авторских прав

Именованный объект является либо статическим, либо автоматическим (см.$$2.1.3). Статический объект размещается в памяти в момент запуска программы и существует там до ее завершения. Автоматический объект размещается в памяти всякий раз, когда управление попадает в блок, содержащий определение объекта, и существует только до тех пор, пока управление остается в этом блоке. Тем не менее, часто бывает удобно создать новый объект, который существует до тех пор, пока он не станет ненужным. В частности, бывает удобно создать объект, который можно использовать после возврата из функции, где он был создан. Подобные объекты создает операция new, а операция delete используется для их уничтожения в дальнейшем. Про объекты, созданные операцией new, говорят, что они размещаются в свободной памяти. Примерами таких объектов являются узлы деревьев или элементы списка, которые входят в структуры данных, размер которых на этапе трансляции неизвестен. Давайте рассмотрим в качестве примера набросок транслятора, который строится аналогично программе калькулятора. Функции синтаксического анализа создают из представлений выражений дерево, которое будет в дальнейшем использоваться для генерации кода. Например:

enode* left = term();

enode* n = new enode;

Генератор кода может использовать дерево выражений, например так:

void generate(enode* n)

Объект, созданный с помощью операции new, существует, до тех пор, пока он не будет явно уничтожен операцией delete. После этого память, которую он занимал, вновь может использоваться new. Обычно нет никакого «сборщика мусора», ищущего объекты, на которые никто не ссылается, и предоставляющего занимаемую ими память операции new для повторного использования. Операндом delete может быть только указатель, который возвращает операция new, или нуль. Применение delete к нулю не приводит ни к каким действиям.

Операция new может также создавать массивы объектов, например:

char* save_string(const char* p)

char* s = new char[strlen(p)+1];


Отметим, что для перераспределения памяти, отведенной операцией new, операция delete должна уметь определять размер размещенного объекта. Например:

int main(int argc, char* argv[])

Стандартная реализация функции operator new() не инициализирует предоставляемую память.

Что случится, когда операция new не сможет больше найти свободной памяти для размещения? Поскольку даже виртуальная память небесконечна, такое время от времени происходит. Так, запрос вида:

char* p = new char [100000000];

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

Для знатоков: выделение памяти в Windows VS кэширование?

Ситуация: компьютер, на борту которого 4 ГБ оперативной памяти, работающий под управлением Windows 7 64-bit в течение нескольких часов занимался сложной задачей (импорт большого массива данных в SQL из кучи мелких файлов (100.000+ файлов)). Постепенно работа компьютера замедлялась все больше и больше и он стал почти совсем неотзывчивым. Монитор ресурсов на вкладке «Память» в разделе «Физическая память» показывает:

Зарезервированное оборудование: 2 МБ

Используется: 3874 МБ

Ожидание: 163 МБ

(пока я это писал, цифры незначительно изменялись то в большую, то в меньшую сторону)

НО! Если просуммировать процессы по значениям в столбце «Завершено (КБ)» или «Рабочий набор (КБ)» (кто-нибудь может пояснить в двух словах, в чем разница между этими значениями?), то по сумме получается, что все процессы потребляют не более 2 ГБ памяти.

Вопрос: кто съел еще почти 2 ГБ памяти и почему она не высвобождается? (в текущий момент никаких трудоемких или требующих памяти задач не выполняется).

PS В диспетчере задач на вкладке «Быстродействие» такая картина по памяти:

Выделено (МБ): 5979 / 8187 (хотелось бы чтобы кто-то также прокомментировал, что означают эти цифры)

Надеюсь только на экспертов.

  • Вопрос задан более трёх лет назад
  • 26520 просмотров


>>Свободно: 46 МБ
Это количество действительно свободной памяти, т.е. вообще ни подо что не задействованной. В нормальных условиях её и должно быть свободно чуть-чуть, т.к. остальная _доступная_ память должна уходить на кеширование.

>>в чем разница между этими значениями
Ну вообще, если навести мышу на заголовки, то там подсказка выплывает ;)
Завершено — сколько виртуальной памяти выделенно процессу (т.е. например процесс попросил 2Гб аллокейтнуть — будет показывать 2Гб здесь);
Рабочий набор — сколько в реальности сейчас висит в оперативной памяти, т.е. значение может быть меньше чем «Завершено».
Вот хороший пример:

>>Вопрос: кто съел еще почти 2 ГБ памяти и почему она не высвобождается?
Ну куда именно она ушла только по итоговым показателям трудно сказать, для более-менее конкретного гадания нужно хотя скриншоты. Крайне желательно взять Process Monitor (www.sysinternals.com).

>>Всего: 4094
Это объём _оперативной памяти_ (без свопа)
>>Кэшировано: 178
Это объём оперативной памяти выделенной под кеширование файлов
>>Доступно: 211
Это объём оперативки, который система может выделить для процесса (состоит из кеш+свободная)

>>Выделено (МБ): 5979 / 8187
Выделено памяти — 5979 мегабайт из максимально доступных 8187 мегабайт, состоящих из

4096 Мб оперативной памяти и 4096 Мб файла подкачки.
Что, кстати, косвенно говорит о том, что памяти кто-то очень немало сожрал, аж в 1,5 раза больше чем оперативки.

Оперативная память: разрушаем мифы

Существует целый ряд программ, по сути своей шарлатанских. Все они обещают чудодейственный прирост скорости компьютера благодаря освобождению места в оперативной памяти компьютера. Чтобы понять, почему это бесполезно и даже вредно, для начала надо разобраться — что такое вообще оперативная память?

Что такое оперативная память и зачем она нужна?

Оперативная память (или RAMRandom Access Memory, или ОЗУОперативное Запоминающее Устройство) — энергозависимая память, используемая для временного хранения команд и данных, необходимых для вычислений, которые делает процессор (или процессоры) компьютера. Более точно и подробно об этом рассказано в Википедии, а я сосредоточусь на собственно проблеме свободного места в оперативной памяти.

RAM нужна процессору для быстрого доступа к данным, что жесткий диск никак обеспечить не может. Поэтому программа при запуске загружается в оперативную память — только так компьютер может делать вычисления, гоняя данные к процессору из оперативной памяти и обратно.

В Windows запущенные программы физически могут располагаться не только «в платах оперативной памяти», но и на жестком диске в файле pagefile.sys. Этот файл называется «файлом подкачки» или «свопом» (от англ. swap).

Идея такова: если программа занимает много памяти, ее часть выгружается на жесткий диск в файл подкачки, освобождая «жизненное пространство» для других программ, а в случае надобности данные загружаются обратно в оперативную память.

Проблема заключается в том, что разница в скорости между оперативной памяти и жестким диском огромна. Наглядно это можно продемонстрировать так:

Чтобы в файл подкачки сбрасывались только ненужные данные, в Windows работает Менеджер памяти. Работает вполне успешно, благодаря чему на компьютере с 512 Мб ОЗУ можно запускать программы, занимающие более гигабайта памяти. Типичный пример — современные версии Adobe Photoshop, 3DS Max и многие другие программы для сложных вычислений. Конечно, при таком малом количестве оперативной памяти программы будут сильно тормозить, однако работать в них худо-бедно, но возможно.

Что же делают оптимизаторы памяти?

Проведу аналогию с лекарствами для снятия симптомов — они не лечат причину, только облегчают симптомы. Если человек болеет гриппом, избавление от насморка не вылечит его. Если компьютер тормозит и свободной памяти мало — он тормозит не из-за занятой памяти, но из-за чересчур ресурсоемкой программы или, например, перегрева.

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

Типичный пример программ, требующих большие объемы ОЗУ — игры. Если игре требуется 2 гигабайта оперативной памяти — с этим ничего поделать нельзя. Без требуемого объема RAM играть будет проблематично из-за низкой частоты кадров — игра будет тормозить из-за того, что часть данных будет располагаться на медленном файле подкачки. Оптимизаторы оперативной памяти создают такой же негативный эффект — после освобождения памяти программам выделяется памяти меньше, чем им того требуется, из-за чего опять-таки начинаются «тормоза».

Замечание №1: Я не утверждаю, что частота кадров в играх напрямую зависит от объема оперативной памяти. Установив больше оперативной памяти в компьютер, удастся повысить производительность только в тех программах, где действительно важен объем ОЗУ без оглядки на другие более важные параметры: частота процессора, характеристики видеокарты, частота оперативной памяти, скорость жесткого диска и т.д.

Замечание №2: С программами случаются ошибки под общим названием «утечка памяти«, когда программа беспричинно «разрастается» и занимает всю память без надобности, но в таком случае надо требовать от разработчиков этой программы исправления ошибки, а не освобождать память оптимизаторами.


Как работают оптимизаторы памяти

Программы оптимизации памяти (названия у них могут быть разные — SuperRAM, FreeMemory, Memory Management SuperProMegaEdition и т.п.) могут освобождать память несколькими способами, но все они завязаны на принципе обмана Менеджера памяти Windows:

  1. Программа вызывает специальную функцию EmptyWorkingSet(), которая заставляет все программы как можно больше выгрузить «себя» в файл подкачки.
  2. Программа начинает бесконтрольно разрастаться в памяти, сообщая Менеджеру памяти Windows о том, что ей это нужно для дела (я говорю метафорами, но вообще-то дело обстоит именно так), в результате чего Менеджер памяти выбрасывает как можно больше программ на жесткий диск в файл подкачки.
Илон Маск рекомендует:  Asp семейство session contents

Итог всегда один: программы начинают тормозить, зато циферка свободного места в оперативной памяти зеленого цвета и программа оптимизации памяти говорит, что все хорошо. В итоге пользователь радуется, открывает окно со свой любимой программой и… ждет. Потому что его любимая программа начинает сильно тормозить. Так будет до тех пор, пока программа не вернет «себя» в оперативную память из файла подкачки. В итоге оперативная память снова заполняется, индикатор свободного места снова сообщает о занятости памяти, пользователь злится, запускает очистку памяти и все происходит по второму (третьему, пятому, десятому) кругу.

Обратного эффекта — чтобы программа заняла всю оперативную память якобы для быстрой работы — добиться не удастся. Слово «якобы» я употребил потому, что в идеальном случае (когда памяти достаточно) программы берут столько памяти, сколько им нужно и мешать этому процессу нельзя. Вмешаетесь в процесс — получите тормоза, вызванные частым обращением к файлу подкачки.

Еще один печальный момент: оптимизаторы памяти не могут выгрузить из оперативной памяти ненужные программы. Их «ненужность» определяем мы сами, в компьютере все устроено иначе. В файл подкачки выгружаются все программы без разбора.

Вывод №1: освобождение оперативной памяти оптимизаторами идет только во вред и снижает производительность.

Вывод №2: нельзя судить о скорости работы программы по тому, сколько места она занимает в оперативной памяти.

Вывод №3: если программа занимает много места в оперативной памяти, значит — она оперирует большими объемами данных. Помочь ей «думать» быстрее можно только увеличив объем оперативной памяти, т.е. поставив в компьютер побольше плат ОЗУ. Но это не поможет, если остальные характеристики ПК не соответствуют требованиям.

Чтобы не быть голословным, вот ссылка на аналогичные выводы с объяснением работы Менеджера памяти Windows: сюда.

Как надо оптимизировать память?

Самый очевидный способ повысить производительность компьютера — закрыть ненужные программы. Второй — установить побольше планок (плат) оперативной памяти, чтобы программы «чувствовали себя более вольготно» и работали пошустрее. Других способов ускорения компьютера, непосредственно связанных с оперативной памятью, нет.

Еще раз повторюсь: оптимизаторы памяти — бред с целью заработать деньги на доверчивых пользователях. Такой же глупостью является и подстройка «скрытых настроек памяти» в Windows, так как там все уже настроено наиболее оптимально после тестирования на большом количестве компьютеров. Специфичные моменты бывают, но к домашним компьютерам это не относится.

О свободной оперативной памяти в Windows Vista, 7, 8, 10

На форумах я часто вижу возмущенные крики (цитирую): «Поставил Windows 7 (8, 10), посмотрел Диспетчер задач, а там говорится, что занято полтора гигабайта или вся оперативная память! Windows 7 (8, 10) жрет очень много памяти!»

На самом деле все обстоит совсем не так и причин возмущаться нет. Совсем наоборот: в современных операционных системах свободная память отводится под кэш. Это происходит преимущественно благодаря функции SuperFetch. Благодаря кэшу программы запускаются быстрее, так как вместо обращения к жесткому диску данные загружаются из оперативной памяти (см. картинку выше, разница в скорости работы жесткого диска и ОЗУ написана жирным шрифтом). Если какой-то программе понадобиться больше оперативной памяти — кэш моментально сократит свой размер, уступив ей место. Подробнее об этом написано на Хабрахабре.

Выводы:

  1. Память очищать не нужно, потому что каждый байт объема используется максимально эффективно.
  2. Забудьте про оптимизаторы памяти — они не оптимизируют ничего, мешая работе кеша и прочим функциям Windows.
  3. Если занято много оперативной памяти сразу после включения компьютера — это абсолютно нормально и не является причиной медленной работы программ. Конечно, если автозагрузка забита десятком-другим программ, которые и занимают эту самую память, заодно нагружая процессор и эксплуатируя жесткий диск, тормозить будет обязательно. С такими программами нужно бороться, удаляя их или убирая из автозагрузки, а не очищать память оптимизаторами.

Также существует миф, что при использовании Windows Vista, 7, 8 и 10, кэш мешает программам. Якобы «когда программе нужно больше оперативной памяти, оказывается, что она забита кэшем, возникают тормоза». На самом деле это неправда. Кэш улетучивается мгновенно и программе сразу становится доступен нужный объем оперативной памяти.


Изменение размера файла подкачки, его перемещение или отключение

Тоже довольно распространенные, в некотором роде вредные, советы. Об этом есть хорошая статья на Хабрахабре. Я лишь приведу наиболее важные выводы той статьи, добавив свои, из личного опыта:

  1. Изменять размер файла подкачки нет особого смысла. Теоретически, в идеале надо выставить размер файла подкачки не больше того, который требуется запущенным программам, но проблема в том, что даже если вы используете одни и те же программы одних и тех же версий день ото дня, ситуации бывают разные (вы можете запустить в браузере одну вкладку, а можете сотню, каждую с открытой игрой на Flash) и требования к доступной памяти будут разные — предполагаемый «идеальный» размер файла подкачки будет меняться от минуте к минуте. Поэтому смысла изменять размер файла подкачки нет, так как «идеальный размер» файла подкачки меняется постоянно. Проще оставить тот размер, который определила система, и не морочить себе голову.
  2. Если отключить файл подкачки на системном разделе (при этом файл подкачки может использоваться на других разделах), не будет работать дамп памяти при ошибках BSOD. Поэтому, если система будет показывать «синий экран смерти», для выявления причины сбоя придется сначала включить файл подкачки на системном разделе, затем ждать повторения сбоя. Есть только одна ситуация, когда целесообразно отключать файл подкачки на системном диске (лишаться возможности диагностики) и включать на другом — если в компьютере установлено два и более физических жестких диска. Перемещение файла подкачки на другой физический диск может снизить количество подтормаживаний из-за распределения нагрузки на диски.
  3. Отключение файла подкачки (полное, т.е. на всех дисках) вызовет проблемы и вылеты ресурсоёмких программ. Вы не поверите, но даже сейчас, когда в домашнем ПК установлено в среднем 16 Гб RAM, встречаются программы, которым требуется больше. Лично я сталкивался с проблемами при рендеринге сложных сцен с помощью V-Ray и при работе в программе GIMP — эти программы довольно прожорливы по части доступной памяти и закрываются при её нехватке.
    Примечание: очевидно, что программы обычно не пишут данные в файл подкачки сами, за них это делает ОС (но бывают исключения). Как бы то ни было, отключенный файл подкачки нельзя рассматривать как часть нормального режима работы компьютера.
  4. Перемещение файла подкачки на RAM-диск (очень быстрый виртуальный диск, находящийся в оперативной памяти) нецелесообразно.
    Во-первых, и это самое главное, при запуске Windows RAM-диск может инициализироваться позже того момента, когда системе понадобится файл подкачки. Из-за этого может случиться что угодно — от BSOD до спонтанных подтормаживаний системы (столкнулся с перечисленным, когда проверял эту идею).
    Во-вторых, размер такого файла подкачки будет небольшой — память-то не резиновая. Возникает выбор — либо нехватка ОЗУ при большом файле подкачки в памяти, либо глюки программ при нехватке места в маленьком файле подкачки. Золотой середины нет, т.к. компьютер может выполнять совершенно разные задачи.
    Исключение, когда можно создать большой файл подкачки на RAM-диске — если у вас 16 Гб ОЗУ и больше. Однако при таком объеме ОЗУ файл подкачки почти не используется, пропадает смысл держать его в оперативной памяти.
    В-третьих, это просто бессмысленно, потому что своп нужен для расширения виртуальной памяти за счёт жёсткого диска или SSD.

Очистка файла подкачки

В файле подкачки pagefile.sys может храниться разнообразная информация конфиденциального характера — например, картинки из недавно открытых в браузере страниц. Это нормальный процесс, обусловленный особенностями работы программ в Windows. При желании можно включить очистку файла подкачки при выключении компьютера. Однако производительности этот твик никоим образом не прибавит, наоборот — серьезно замедлит выключение и перезагрузку компьютера.

Если вы не работаете с конфиденциальными данными, лучше не включать очистку pagefile.sys.

Доступность более 4 Гб оперативной памяти в Windows

Интернет буквально завален рассуждениями пользователей о том, почему в битной Windows доступно 3,5 Гб оперативно памяти вместо, например, установленных 4 Гб. Было придумано множество теорий, мифов, легенд. Например, считают, что это ограничение, сделанное Microsoft, которое можно снять. На самом деле это отчасти правда — принудительное ограничение действительно есть. Только снять его нельзя. Это обусловлено тем, что в 32-разрядных системах драйвера и программы могут нестабильно работать при использовании системой больше четырех гигабайт оперативной памяти. Для 64-битных Windows драйвера тщательнее тестируют, вышеупомянутого ограничения там нет.

Но не все так просто. Windows 7 Начальная (Starter) (и ее аналог у Vista) не видит больше 2 Гб оперативной памяти. Это тоже ограничение, только не по причине нестабильно работающего софта. Дело в том, что Windows 7 Начальная распространяется исключительно на маломощных нетбуках, по факту практически бесплатно, поэтому необходимо было дистанцировать ее от более дорогих изданий: Домашней базовой, Домашней Расширенной, Максимальной и т.д. Часть ограничений Windows 7 Starter можно снять, но только не ограничение на два гигабайта оперативной памяти.

Что касается остальных 32-битных изданий Windows XP, Vista, 7 и Windows 8/10: на практике пользователю доступно еще меньше — 3,5 Гб. Все дело в том, что драйвера тоже имеют свои адреса, которые лишают программы Windows доступа к части памяти в 512 мегабайт. Существует патч, позволяющий «задвинуть» такие адреса за пределы четырех гигабайт, чтобы система стала использовать все 4 Гб оперативной памяти, но это практически не имеет смысла:

  • Как я писал выше, драйвера и программы не смогут корректно работать после такого патча, так что система может начать зависать, выдавать ошибки, т.е. вести себя непредсказуемо.
  • Даже если в компьютере будет установлено плат оперативки на 8, 16, 32 Гб или больше — это никак не поможет их задействовать в 32-битном режиме операционной системы.

Какой смысл от доступности дополнительных 512 Мб оперативной памяти, если система станет нестабильной? Вот наглядный пример. Все равно придется ставить 64-битную Windows.

То, что видно 4 Гб оперативной памяти, не значит, что ее можно эффективно использовать. Проблема в том, что 32-битная Windows не может грамотно выделить процессу (программе) более 2 Гб физической оперативной памяти. Об этом многие забывают — и зря. Неважно, сколько оперативной памяти в компьютере, если программе нельзя дать больше 2 Гб ОЗУ. Пример: если пользователь работает в 32-битной Windows с Photoshop на компьютере с 4 Гб оперативной памяти — Фотошоп сможет задействовать всего лишь два гигабайта максимум, остальные данные скинет в файл подкачки и начнет тормозить. С играми то же самое.

Илон Маск рекомендует:  Div колонки 4 способа растянуть div колонки по высоте

На самом деле, только в 64-битной операционной системе программы могут задействовать весь потенциал оперативной памяти объемом больше двух гигабайт. И то не все, а только рассчитанные на использование больше 2 Гб ОЗУ. Ситуацию опять-таки можно исправить с помощью соответствующих патчей в 32-битной Windows, но это работает далеко не со всеми программами. Повторюсь: только 64-битная Windows и 64-битные программы, запущенные в ней — единственный выход задействовать весь потенциал большого объема ОЗУ.

Между тем, с серверными версиями Windows ситуация иная: там доступны гораздо большие объемы оперативной памяти даже в 32-битных версиях ОС. Почему так происходит, рассказано в статье Преодолевая границы Windows: физическая память от Марка Руссиновича.

Также есть моя заметка Какую выбрать систему — 32 бит или 64? в статье про установку Windows 7 для новичков.

Мифы: 64-битная Windows 7/8/10 потребляет много памяти, ей нужно 4 Гб оперативной памяти, и вообще она прожорливый монстр

Как говорится, «у страха глаза велики». На самом деле разница между Windows обеих разрядностей не так существенна, как кажется. Например, 64-битная Windows 7 может работать даже на компьютере с 256 Мб ОЗУ, хотя тормозить будет нещадно (как и 32-битная версия):

Windows 7 на компьютере с 256 Мб оперативной памяти.


Чтобы показать разницу в требованиях к оперативной памяти 32-битной и 64-битной Windows, я установил Windows 7 обеих разрядностей:

Потребление памяти Windows 7 обеих разрядностей

Обе Windows были установлены в одинаковые виртуальные машины с 2 Гб ОЗУ в каждой. Из программ установлены только VMWare Tools (использовалась пробная версия виртуальной машины VMWare). В 32-битной Windows 7 было выделено 606 Мб, в 64-битной — 766. Выделенная память — это вообще вся занятая программами и системой виртуальная память (в ОЗУ и файле подкачки). Занятой оперативной памяти будет меньше, в зависимости от запущенных программ.

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

Если обратиться к официальной странице с системными требованиями Windows 7 и Windows 8, то можно увидеть, что для 32-битной Windows 7/8 требуется компьютер с 1 Гб оперативной памяти, а для 64-битной — 2 Гб минимум. Действительно, если использовать 64-битную Windows 7/8 на компьютере с 1 Гб ОЗУ, свободной памяти останется мало, что снизит производительность компьютера из-за явной нехватки оперативной памяти. В масштабах 2 гигабайт потеря 0,15 части гигабайта уже будет малозаметна, зато начнут проявляться преимущества 64-битной системы и 64-битных программ.

Вывод: на компьютере с ОЗУ меньшим, чем 2 Гб, выгоднее устанавливать 32-битную Windows 7/8/10. На компьютере с количеством оперативной памяти больше 2 Гб (или равном) ничего не мешает установке 64-битной Windows 7/8/10.

О преимуществах 64-битной версии Windows 7/8/10 рассказано выше, так что рекомендую поскорее переходить на нее.

Увеличение оперативной памяти с помощью ReadyBoost

Здесь уже Microsoft сама внесла путаницу во времена выхода Висты, рассказывая на своем официальном сайте о том, что с помощью ReadyBoost можно решить проблему с нехваткой оперативной памяти по принципу «вставил флешку и расширил объем ОЗУ». На самом деле это не так. При работающей технологии ReadyBoost на флешке создается специальный файл, куда копируются наиболее часто используемые файлы. Благодаря этому некоторые программы запускаются быстрее, что частично устраняет проблему «подвисаний» компьютера, но, к сожалению, не повышает производительность системы в целом и тем более не увеличивает объем оперативной памяти. ReadyBoost позволяет частично решить проблемы, связанные с чтением медленного жесткого диска, и только.

Подробнее об ReadyBoost можно почитать здесь.

5 команд для проверки использования памяти на Linux

Главное меню » Операционная система Linux » 5 команд для проверки использования памяти на Linux

Использование памяти

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

1. Команда free

Команда free является самой простой и легкой в использовании командой, чтобы проверить использование памяти на Linux. Вот краткий пример

Опция -m отображает все данные в мегабайтах. Общий общий объем оперативной памяти ОС Linux 7976 МБ, установленной в системе, то есть 8 Гб. Колонка used показывает объем оперативной памяти, которая может быть использована на Linux, в нашем случае составит около 6,4 Гб. Загвоздкой здесь является колонки cached и buffers. Вторая строка говорит, что 4,6 Гб свободно. Это свободная память в первой строке с добавлением буферов и объема памяти кэша.

Linux имеет привычку кэшировать для повышения производительности, так что память может быть освобождена и использована при необходимости.
Последняя строка, это подкачка памяти (swap), который в этом случае полностью свободна.

2. /proc/meminfo

Следующий способ проверить использование памяти, прочитать файл /proc/meminfo. Знайте, что файловая система /proc не содержит реальных файлов. Они являются виртуальными файлами, которые содержат динамическую информацию о ядре и системы.

Проверьте значения MemTotal, MemFree, Buffers, Cached, SwapTotal и SwapFree. Они указывают на одни и те же значения, использования памяти в команде free.


3. vmstat

Команда vmstat с опцией -s, показывает статистику использования памяти почти как команда Proc. Вот пример

Верхние несколько строк указывают общий объем памяти, объем свободной памяти и т.д., и так далее.

4. команда top

Команда top обычно используется для проверки памяти и процессора для каждого процесса. Тем не менее она также сообщает общее использование памяти и может быть использована для контроля общего использования памяти. Вывод результата имеет необходимую информацию. Вот пример вывода

Проверьте KiB Mem и KiB Swap в заголовке. Они указывают на общую, используемую и свободную объем памяти. Информация буфера и кэша присутствует здесь тоже, как и команды free.

5. Команда htop

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

Заголовок в верхней части показывает использование центрального процессора вместе с оперативной памятью и использование своп с соответствующими цифрами.

Информация памяти (RAM)

Чтобы узнать аппаратную информацию об установленной оперативной памяти, используйте команду dmidecode. Команда выводит детальную информацию об установленной оперативной памяти.

Информация включает в себя размер (2048MB), тип (DDR2), скорость (667 МГц) и т.д.

Резюме

Все вышеперечисленные команды работают с терминала и не имеют графического интерфейса. При работе на рабочем столе с графическим интерфейсом, гораздо проще в использовании графический инструмент с графическим выводом. Наиболее распространенные инструменты gnome-system-monitor в gnome и
KSysguard в KDE. Оба предоставляют информацию об использовании ресурсов о CPU, RAM, обмена и пропускной способности сети в графическом режиме и легко понятном визуальном выводы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Большая Энциклопедия Нефти и Газа

Распределенная свободная память

Распределенная свободная память занимает меньшую часть пространства памяти. [1]

Использование распределенной свободной памяти требует дополнительных затрат памяти по сравнению с использованием областей переполнения. Однако свободная память позволяет существенно ускорить доступ к включенным записям. [2]

Размещение новых записей в распределенной свободной памяти может быть выполнено двумя способами. По первому способу записи просто вносятся в соответствующую группу без перетасовки других записей в группе. Таким образом, для того чтобы найти запись, необходимо выполнить последовательный просмотр всей группы. По второму способу запись включается в группу в соответствии со значениями ее ключа, что требует перемещения некоторых элементов группы. Таким образом, первый способ обеспечивает меньшее время включения записей, а второй — меньшее время их чтения. В том случае, если файл используется в основном для чтения, а не для включения новых данных, целесообразно применять второй способ. [3]

Рис, 30.13, Древовидный индекс с одинаковой высотой ветвей, размещенный по способу сверху вниз и слева направо, Распределенная свободная память имеется только на самом нижнем уровне. [4]


Существуют два основных метода реализации этих подходов: метод организации цепочек участков переполнения и метод распределенной области переполнения, который аналогичен методу распределенной свободной памяти , рассмотренному в предыдущих главах. [5]

При создании файла осуществляется включение записей в управляемые интервалы, при этом их не заполняют до предела, что приводит к образованию распределенной свободной памяти в каждом из интервалов. Кроме этого, внутри управляемой области некоторые управляемые интервалы остаются свободными. Каждый элемент набора указателей указывает на один управляемый интервал. Системный программист, отвечающий за создание и ведение файла, должен заранее определить необходимый объем распределенной свободной памяти и количество свободных управляемых интервалов для каждого создаваемого файла. [6]

Если же обновление файла выполняется на устройстве с прямым доступом, то включение и удаление элементов могут быть выполнены с помощью метода переполнения или метода распределенной свободной памяти . [7]

В процессе функционирования системы должны обрабатываться включения и удаления записей, поэтому показанные на рисунках структуры следует еще более усложнить за счет введения либо записей переполнения, либо распределенной свободной памяти . [8]

Использование областей переполнения всегда увеличивает время поиска некоторых вновь включенных записей. Распределенная свободная память увеличивает это время незначительно. В каждой группе оставляется свободное место для включения нескольких новых записей; можно также оставлять Свободными целые группы. [9]

Использование областей переполнения всегда увеличивает время поиска некоторых вновь включенных записей. Распределенная свободная память увеличивает это время незначительно. В каждой группе оставляется свободное место для включения нескольких новых записей; можно также оставлять свободными целые группы. [10]

Наличие значительного объема свободной памяти в каждом управляемом интервале приводит к тому, что большая часть вновь поступающих записей умещается в пределах соответствующих интервалов. Тем не менее неизбежны случаи нехватки распределенной свободной памяти в интервалах для включения новых записей. В таких случаях осуществляется расщепление интервала. Предположим, что необходимо включить запись с некоторым значением ключевого поля. В соответствии со значением ключевого поля определяется управляемый интервал, в который следует включить запись. Но интервал полностью заполнен, и поэтому осуществляется его расщепление, заключающееся в том, что около половины его записей пересылается в свободный интервал, входящий в состав той же управляемой области. Программы VSAM находят свободный управляемый интервал, для которого соответствующий элемент в наборе указателей помечен как свободный. [11]

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

Илон Маск рекомендует:  Пример использования конструктора обьектов constructor. Java Script

При дальнейших включениях записей блок придется перестраивать и, возможно, расщеплять. Расщепление блока может выполняться с помощью указателей на область переполнения или распределенной свободной памяти , как это уже рассматривалось выше. [13]

На рис. 20.10 показан пример расщепления управляемых интервалов и областей, вызванного включением новых записей в файл VSAM. На диаграмме 1 показан файл до включения новых записей. В каждом управляемом интервале имеется распределенная свободная память , а в каждой управляемой области зарезервирован один свободный управляемый интервал. На диаграмме 2 показано, что включение записей с ключами ARK, BED и BEG не вызывает расщепления интервалов и областей, так как существует достаточное количество распределенной свободной памяти. Отметим, что записи могут иметь различную длину. Операция модификации может вызвать изменение длины записи, при этом старая запись уничтожается, а модифицированная включается в файл на правах новой записи. [14]

Основными причинами раздельного хранения данных и связей является обеспечение более полной независимости данных и возможности ускорения поиска. Кроме этого иногда достигается и экономия памяти. Дело в том, что указатели в отдельном файле связей обычно короче указателей между записями данных; если при этом для накопления новых значений записей используется распределенная свободная память , то неиспользованное адресное пространство будет связано с файлом связей, где оно значительно меньше, чем это имеет место при размещении связей в файле записей данных. [15]

Свободная память

О перация new (этот пункт) вызывает функцию

extern void* _new (long);

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

О перация delete вызывает функцию

extern void _delete (void*);

чтобы освободить память, указанную указателем, для повторного использования. Результат вызова _delete() для указателя, который не был получен из _new(), не определен, это же относится и к повторному вызову _delete() для одного и того же указателя. Однако уничтожение с помощью delete указателя со значением ноль безвредно.

П редоставляются стандартные версии _new() и _delete(), но пользователь может применять другие, более подходящие для конкретных приложений.

К огда с помощью операции new создается классовый объект, то для получения необходимой памяти конструктор будет (неявно) использовать new. Конструктор может осуществить свое собственное резервирование памяти посредством присваивания указателю this до каких-либо использований. С помощью присваивания this значения ноль деструктор может избежать стандартной операции дерезервирования памяти для объекта его класса. Например:

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


Е сли производный класс осуществляет присваивание this, то вызов конструктора (если он есть) базового класса будет иметь место после присваивания, так что конструктор базового класса ссылаться на объект посредством конструктора производного класса. Если конструктор базового класса осуществляет присваивание this, то значение также будет использоваться конструктором (если таковой есть) производного класса.

Бьерн Страуструп — Язык программирования С++. Главы 2-4
Страница 44. Свободная память

3.2.6 Свободная память

Именованный объект является либо статическим, либо автоматическим
(см.$$2.1.3). Статический объект размещается в памяти в момент запуска
программы и существует там до ее завершения. Автоматический объект
размещается в памяти всякий раз, когда управление попадает в блок,
содержащий определение объекта, и существует только до тех пор, пока
управление остается в этом блоке. Тем не менее, часто бывает удобно
создать новый объект, который существует до тех пор, пока он
не станет ненужным. В частности, бывает удобно создать объект, который
можно использовать после возврата из функции, где он был создан.
Подобные объекты создает операция new, а операция delete используется
для их уничтожения в дальнейшем. Про объекты, созданные операцией new,
говорят, что они размещаются в свободной памяти. Примерами таких
объектов являются узлы деревьев или элементы списка, которые входят
в структуры данных, размер которых на этапе трансляции неизвестен.
Давайте рассмотрим в качестве примера набросок транслятора, который
строится аналогично программе калькулятора. Функции синтаксического
анализа создают из представлений выражений дерево, которое будет
в дальнейшем использоваться для генерации кода. Например:

struct enode <
token_value oper;
enode* left;
enode* right;
>;

enode* expr()
<
enode* left = term();

for(;;)
switch(curr_tok) <
case PLUS:
case MINUS:
get_token();
enode* n = new enode;
n->oper = curr_tok;
n->left = left;
n->right = term();
left = n;
break;
default:
return left;
>
>

Генератор кода может использовать дерево выражений, например так:

void generate(enode* n)
<
switch (n->oper) <
case PLUS:
// соответствующая генерация
delete n;
>
>

Объект, созданный с помощью операции new, существует, до тех пор,
пока он не будет явно уничтожен операцией delete. После этого
память, которую он занимал, вновь может использоваться new. Обычно нет
никакого «сборщика мусора», ищущего объекты, на которые никто
не ссылается, и предоставляющего занимаемую ими память операции new для
повторного использования. Операндом delete может быть
только указатель, который возвращает операция new, или нуль.
Применение delete к нулю не приводит ни к каким действиям.
Операция new может также создавать массивы объектов, например:

char* save_string(const char* p)
<
char* s = new char[strlen(p)+1];
strcpy(s,p);
return s;
>

Отметим, что для перераспределения памяти, отведенной операцией new,
операция delete должна уметь определять размер размещенного объекта.
Например:

int main(int argc, char* argv[])
<
if (argc .
Стандартная реализация функции operator new() не инициализирует
предоставляемую память.
Что случится, когда операция new не сможет больше найти свободной
памяти для размещения? Поскольку даже виртуальная память небесконечна,
такое время от времени происходит. Так, запрос вида:

char* p = new char [100000000];

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

Управление свободной внешней памятью

Для управления свободной памятью на диске система использует битовый вектордлины n,где n – общее число блоков на диске, каждый бит которого описывает состояние соответствующего блока: bit[i] = 0, если block[i] свободен, 1 – если блок занят. При таком представлении информации о свободных и занятых блоках, номер первого занятого блока вычисляется по простой формуле:

номер первого занятого блока = число битов в слове * число нулевых слов + номер первой 1.

Битовые шкалы, используемые для управления блоками, требуют дополнительной памяти. Например, при размере блока в 2 12 байтов и размере диска в 2 30 байтов (1 GB) длина битового вектора будет равна n= 2 30 /2 12 = 2 18 битов (или 32 KB).

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

Для предотвращения ситуаций рассогласованности информации о свободной дисковой памяти, операционной системе необходимо защищать указатель на список свободной памяти, либо битовую шкалу (в зависимости от способа представления информации о свободной памяти). Битовый вектор должен храниться на диске. Однако его копии в памяти и на диске могут различаться. Нельзя допустить, чтобы block[i] имел такую ситуацию, когда bit[i] = 1 в памяти и bit[i] = 0 на диске. Решение этой проблемы в том, чтоты согласовывать значения битов на диске и в памяти по следующему алгоритму:


· Установить bit[i] = 1 на диске;

· Установить bit[i] = 1 в памяти.

Представление информации о свободной дисковой памяти в виде списка блоков иллюстрируется на рис. 7.

Рис.7.Список свободной дисковой памяти.

Эффективность и производительность дисковой памяти

Эффективность использования дисковой памяти зависит от:

· Алгоритмов распределения дисковой памяти и управления директориями;

· Типов данных, хранимых в элементе директории для файла.

Для повышения производительности работы с диском используются следующие методы:

· Кэширование диска– использование специальной области основной памяти для часто используемых блоков диска;

· Освобождение прочитанного (free-behind)и опережающее считывание (read-ahead)– методы оптимизации последовательного доступа к диску, которые заключаются в том, что основная память, в которой хранились копии прочитанных блоков, освобождается, а вместе с очередным блоком файла считываются в основную память и несколько следующих блоков;

· Организация виртуальных дисков —улучшение производительности ПК путем выделения области памяти под виртуальный диск (RAM-диск).

Кэширование диска

Буферная кэш-память. В операционных системах используются различные методы кэширования диска ( рис. 8).

Рис. 8.Различные методы размещения кэша для диска.

В основной памяти хранятся: виртуальные диски, буфера блоков обрабатываемых файлов, таблицы открытых файлов. В буферной памяти контроллера диска хранятся копии обрабатываемых блоков файла.

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

Рис.9.Ввод-вывод без унифицированной буферной кэш-памяти.

Решение данной проблемы – использование унифицированной буферной кэш-памяти.Унифицированная буферная кэшпамять использует один и тот же кэш страниц для кэширования и файлов, отображаемых впамять, и обычных операций ввода-вывода через файловую систему. Схема ввода-вывода с использованием унифицированной буферной кэш-памяти изображена на рис..10.

Рис. 10.Ввод-вывод с использованием унифицированной буферной кэш-памяти.

Последнее изменение этой страницы: 2020-12-30; Нарушение авторского права страницы

Свободная Память — статья

Если вы пользовались классом slist, вы могли обнаружить, что ваша программа тратит на заметное время на размещение и освобождение объектов класса slink. Класс slink — это превосходный пример класса, который может значительно выиграть от того, что программист возьмет под контроль управление свободной памятью. Для этого вида объектов идеально подходит оптимизирующий метод. Поскольку каждый slink создается с помощью new и уничтожается с помощью delete членами класса slist, другой способ выделения памяти не представляет никаких проблем.

Если производный класс осуществляет присваивание указателю this, то конструктор его базового класса будет вызываться только после этого присваивания, и значение указателя this в конструкторе базового класса будет тем, которое присвоено конструктором производного класса. Если базовый класс присваивает указателю this, то будет присвоено то значение, которое использует конструктор производного класса.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL