Пост создан для публикации одной единственной картинки (кликабельна). На мой взгляд, она как нельзя лучше передаёт атмосферу того как устроена память в компьютере. Я изобразил её на 3-4 курсе института на A4 при объяснении положения дел товарищу. Так она мне тогда понравилась, что дал себе обещание нарисовать её в электронном виде.
Исходник в формате VSD (Microsoft Visio) лежит у меня в DropBox. Если имеются уточнения, поправки, комментарии — прошу под кат.
Отношение между ВАП и ВП:
Образ загружается в виртуальную память системы (ВП) единожды и проецируется в те виртуальные адресные пространства (ВАП), в которых он востребован. Образ EXE или DLL идентифицируется уникальным путём к файлу. Соответственно, если к одному и тому же файлу ведут несколько путей, можно произвести множественную загрузку одного и того же модуля. В системе имеется набор DLL, которые подгружаются во все программы, такие как kernel32.dll и прочие…
Отношение между ВП и ФП:
Физическая память (ФП) состоит из страниц. Любой модуль EXE или DLL занимает некоторое число таких страниц. При загрузке системой модулей для них ищутся свободные страницы, в которые загружается образ файла. Модули проецируются в виртуальную память и загружаются в физическую по мере необходимости средствами ОС. Также проецирование можно использовать для пользовательских файлов (также называется маппинг файлов — mapping).
Отношение между ФП и железом:
Операционная система может по своему усмотрению перемещать страницы физической памяти в файл подкачки и обратно. При обращении исполняемого кода к странице, находящейся в файле подкачки, производится выгрузка страницы в ОЗУ. Если к странице долгое время не осуществлялся доступ и возникла потребность в памяти, ОС может перемещение страницы в файл подкачки.
Память случайного доступа (ОЗУ), также известная как память, похожа на краткосрочную память устройства. Приложения и файлы загружаются в ОЗУ с более медленных дисков, что позволяет быстрее получить доступ к этим файлам. Однако содержимое ОЗУ теряется при перезапуске или выключении устройства. Диски, хотя они медленнее, сохраняют свое содержимое при перезапуске или отключении устройства.
Как ОЗУ влияет на скорость и производительность?
-
ОЗУ быстрее, чем диски при чтении и записи информации.
-
Чем больше памяти у устройства, тем больше оно может делать одновременно без снижения производительности.
Какой объем ОЗУ мне нужен?
-
Если вы в основном просматриваете веб-страницы, работаете над документами или потоковой передачей видео в Интернете, старайтесь использовать не менее 4 ГБ памяти.
-
Рекомендуется использовать 8 ГБ памяти, чтобы устройство работало в долгосрочной перспективе.
-
Если вы выполняете редактирование фотографий и видео или работаете над проектами, требующими высокой производительности, 16 ГБ памяти или более могут подойти в соответствии с вашими потребностями.
Статьи по теме
Найдите подходящий вам компьютер с Windows.
Нужна дополнительная помощь?
Нужны дополнительные параметры?
Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.
В прошлый раз мы рассмотрели вопросы использования глобальных переменных. Прежде, чем двинуться дальше, нужно дать небольшой вводный курс по памяти в Windows.
Любая вещь в вашей программе занимает «память компьютера». Это может быть строка, число, открытый файл, запись, объект, форма и даже сам код. Даже хотя вы явно никого не просили выделять память, она всё равно выделена автоматически — либо компилятором, либо операционной системой.
Адресное пространство и все, все, все…
Кратко говоря, память программы может рассматриваться как один очень-очень длинный ряд байтов. Байт — это единица измерения количества информации, в мире Delphi и Windows он равен восьми битам и может хранить одно из 256
различных значений (от 0
до 255
). На память можно смотреть как на массив байт. Что именно содержат эти байты — зависит от того, как интерпретировать их содержимое, т.е. от того, как их используют. Значение 97 может означать число 97
, или же ANSI букву 'a'
. Если вы рассматриваете вместе несколько байт, то вы можете хранить и большие значения. Например, в 2-х байтах вы можете хранить одно из 256*256 = 65536
различных значений, две ANSI буквы 'ab'
или Unicode букву 'a'
— и т.д.
Чтобы обратиться к конкретному байту в памяти (адресовать его), можно присвоить каждому байту номер, пронумеровав их целыми положительными числами, включив ноль за начало отсчёта. Индекс байта в этом огромном массиве и называется его адресом, а весь массив целиком — памятью программы. Диапазон адресов от 0
до максимума называется адресным пространством программы. А максимум (длина) массива называется размером адресного пространства.
(примечание: ну, на самом деле, есть тысяча и один способ адресовать память, но в рамках современного мира и этой статьи мы ограничимся только этим способом).
Адресное пространство (вернее, его размер) определяет способность программы работать с данными. Чем оно больше — тем с большим количеством данных программа сможет работать (в один момент времени). Если у программы заканчивается свободное место в адресном пространстве (т.е. все адреса в нём выделены под какие-то объекты в программе) — то у программы заканчивается память (out of memory).
Как адресное пространство соотносится с вашим исходным кодом
С точки зрения языка высокого уровня (Паскаль) все вещи в вашей программе характеризуются именем (идентификатором), типом («сколько памяти выделять») и семантикой («что с этим можно делать»). Например, целое число занимает 4
байта и их можно читать, писать, складывать и т.п. И число A — это не то же самое, что число B. Строки же занимают переменный объём памяти, их, к примеру, можно соединять и редактировать. И так далее.
Но на уровне машинного языка, железа и операционной системы все они характеризуются только местоположением, размером (в байтах) и атрибутами доступа. Местоположение — это адрес объекта. К примеру, число A может иметь адрес 1234
, а число B — 1238
. И поэтому это два разных числа — потому что у них разный адрес, т.е. они лежат в разных местах. Атрибут доступа является упрощённой «семантикой», которая определяет то, что можно делать с памятью. А таких вещей всего три: читать, писать и выполнять. Последнее означает исполнение машинного кода. Тут нужно пояснить, что ваши данные (числа, строки, формы и т.п.) находятся в одном «контейнере» (том самом «массиве памяти из байт») вместе с кодом программы — .exe файлом. Иными словами, код рассматривается наравне с данными, а чтобы их отличать и служат атрибуты доступа.
Можно увидеть, как понятия языка высокого уровня («имя», «тип» и «семантика») проецируются в понятия низкого уровня («адрес», «размер» и «атрибуты доступа»).
Древний мир
В давние времена память программы была тождественно равна оперативной памяти машины (т.н. ОЗУ или RAM — Random Access Memory). Иными словами, размер адресного пространства программы был равен размеру установленной оперативной памяти. Вот, установлено на вашей машине две планки памяти по 64
Кб — значит, у вашей программы есть 128
Кб памяти. Ну, за вычетом той памяти, что уже занята, конечно же. Адрес объекта программы был равен адресу физической ячейке оперативной памяти (физическому адресу). И если у вас заканчивалось место в ОЗУ, то у вас заканчивалась память в программе.
Конечно, такой способ хотя и весьма прост, имеет две проблемы:
- Память программы ограничена оперативной памятью. А раньше эта память была дорогой и её было очень мало.
- Если нужно запустить две программы, то они будут работать «в одной песочнице»: и первая и вторая программа будут размещать свои данные в одном месте — оперативной памяти. И если первая программа по ошибке запишет что-то в данные второй, то… ой.
Виртуальная память и виртуальное адресное пространство
Поэтому в современном мире используется совершенно другая схема: во-первых, память программы теперь больше не тождественна оперативной памяти. Теперь программа работает исключительно с так называемой «виртуальной памятью». Виртуальная память — это имитация реальной памяти. Она позволяет каждой программе:
- считать, что установлено максимальное теоретически возможное количество оперативной памяти;
- считать, что она является единственной программой, запущенной на машине.
Иными словами, адресное пространство программы более не ограничено размером физической памяти (так называют оперативную память компьютера, чтобы специально указать на её отличие от виртуальной памяти) — адресное пространство имеет теперь максимально возможный размер. К примеру, если для адресации используются 32-битные указатели (4 байта), то размер адресного пространства равен 2^32 = 4'294'967'296
байт. Т.е. 4 миллиарда (если угодно: биллионов) или 4 Гб. А размерность адресного пространства — равна 32
.
В связи с новомодным «переходом на 64
бита» нужно упомянуть, что этот переход заключается в замене 4
-байтных (32
-битных) указателей на 8-байтные (64-битные) — что увеличивает размер адресного пространства программы аж до 2^64 = 18'446'744'073'709'551'616
байт. Т.е. 18
с лишним квинтиллионов байт или 16
Эб (эксабайт) для краткости. Соответственно, 32
-битный указатель может быть любым числом от 0
до 4'294'967'296
(от $00000000
до $FFFFFFFF
). 64
-разрядный указатель может варьироваться от $00000000'00000000
до $FFFFFFFF'FFFFFFFF
.
А из второго пункта следует, что 4
Гб или 16
Эб есть у каждой программы. Т.е. каждой программе отводится своё личное закрытое адресное пространство. Такая изолированность означает, что программа А в своем адресном пространстве может хранить какую-то запись данных по адресу $12345678
, и одновременно у программы В по тому же адресу $12345678
(но уже в его адресном пространстве) может находиться совершенно иная запись данных. Если программа A попробует прочитать данные по адресу $12345678
, то она получит доступ к своей записи (записи программы A), а не данным программы B. Но если к адресу $12345678
обратится программа B, то она получит свою запись, а не запись программы А. Иными словами, программа A не может обратиться в памяти (адресному пространству) программы B и наоборот.
Таким образом, при использовании виртуальной памяти упрощается программирование, так как программисту больше не нужно учитывать ограниченность памяти, или согласовывать использование памяти с другими приложениями. Для программы выглядит доступным и непрерывным всё допустимое адресное пространство, вне зависимости от наличия в компьютере соответствующего объема ОЗУ. Если программы выделяют в их адресных пространствах больше памяти, чем есть в системе физической памяти, то часть памяти из ОЗУ переносится на диск («винчестер») — в т.н. файл подкачки (его ещё называют страничным файлом, page file, SWAP-файлом или «свопом»). Когда программа обращается к своим данным, которые были выгружены на диск, то операционная система автоматически загрузит данные из файла подкачки в ОЗУ. И всё это происходит под капотом — т.е. совершенно незаметно для программы. С точки зрения программы, ей кажется, что она работает с 4
Гб или 16
Эб RAM.
Применение механизма виртуальной памяти позволяет:
- упростить адресацию памяти программами;
- рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);
- изолировать программы друг от друга (программа полагает, что монопольно владеет всей памятью).
А теперь, пока вы не перевозбудились от колоссального объема адресного пространства, предоставляемого вашей программе: вспомните, что оно — виртуальное, а не физическое. Другими словами, (виртуальное) адресное пространство — всего лишь диапазон адресов памяти. Конечно, нехватка памяти теперь не происходит, когда заканчивается свободное место в оперативной памяти. И на машине с 256
Мб ОЗУ, любая программа может выделить, скажем, один кусок в 512
Мб памяти. Конечно же, это не означает, что вы можете выделить аж 16
эксабайт — ведь реальный размер ограничен размером диска. И не факт, что в системе будет диск на 16
эксабайт. Тем не менее, это значительно лучше, чем просто 256
Мб оперативной памяти, установленные на вашем «старичке».
(примечание: по непонятной мне причине, некоторые люди не верят в тот простой факт, что программа может спокойно выделить больше памяти, чем установлено физической памяти в системе; звучит как сюжет для разрушителей легенд (MythBusters)).
Чем чаще системе приходится копировать данные из оперативной памяти в файл подкачки и наоборот, тем больше нагрузка на жесткий диск и тем медленнее работает операционная система (при этом может получиться так, что операционная система будет тратить всё свое время на подкачку памяти, вместо выполнения программ). Поэтому, добавив компьютеру оперативной памяти, вы снизите частоту обращения к жёсткому диску и, тем самым, увеличите общую производительность системы. Кстати, во многих случаях увеличение оперативной памяти дает больший выигрыш в производительности, чем замена старого процессора на новый. А с падением цен на память уже не проблема собрать систему с 16
или 32
Гб оперативной памяти по доступной цене.
Факты о виртуальном адресном пространстве
Хотя в самом начале мы рассматривали память программы (адресное пространство) как один непрерывный однородный блок, сейчас настало время сделать уточнение, что я вам наврал: таковым он не является. Адресное пространство, хотя действительно однородно и непрерывно более чем на 99%
, но в нём есть несколько специальных областей. Я не буду подробно разбирать их все, скажу только о самых важных.
Во-первых, это область для отлова нулевых указателей. Это, определённо, самая важная специальная часть адресного пространства. Начинается она в нуле и заканчивается на адресе 65'535
. Т.е. имеет размер в 64
Кб и расположена в диапазоне $00000000-$0000FFFF
— самом начале адресного пространства. Специальна эта область тем, что она всегда заблокирована: в ней нельзя выделить память, а любое обращение по этим адресам всегда возбуждает исключение access violation (примечание: это не единственная причина возбуждения access violation). Эта область сделана исключительно для нашего удобства. Как вы узнаете потом (или уже знаете), нулевой указатель nil
по числовому значению равен 0
. И если вы случайно (по ошибке) обратитесь к нулевому указателю — то эта область поможет вам возбудить исключение и поймать вашу ошибку.
А что такого особенного в числе 65'535
? Ну, 64
Кб — это гранулярность выделения памяти. Гранулярность выделения памяти определяет, блоками каких размеров вы можете оперировать при выделении и освобождении памяти. Т.е. гранулярность выделения памяти в 64
Кб означает, что вы можете выделять только блоки памяти, размер которых кратен 64
Кб. Зачем так делается? Ну, если вы попробуете вести учёт «выделенности» каждого байта в программе, то размер управляющих структур у вас превысит размер самих данных. Поэтому память выделяют «кластерами». Иными словами, если вы хотите расположить область в начале адресного пространства, то вы не можете выделить меньше, чем 64
Кб. А больше? Больше — можно. Например, 64 + 64 = 128
Кб. Но большого смысла в этом нет.
Почему гранулярность выделения памяти равна именно 64
Кб, а не, скажем, 8
Кб? Ну, на это есть исторические причины.
(примечание: полностью аналогичный блок расположен на границе 2
Гб — но уже по совершенно другим причинам).
Далее, что вам ещё нужно знать про виртуальное адресное пространство — оно доступно вам не полностью. Грубо говоря, в виртуальном адресном пространстве каждой программы сосуществуют сама программа и операционная система. Та часть, где работает ваша программа (и о котором мы говорили всё это время выше), называется разделом для кода и данных пользовательского режима (user mode). Та часть, где работает операционная система, называется разделом для кода и данных режима ядра (kernel mode). Обе эти части находятся в едином адресном пространстве программы.
Чем они отличаются? Про пользовательский раздел мы уже много чего сказали: он свой у каждой программы и это полностью ваш раздел — делайте что хотите. Раздел ядра является здесь особенным в двух моментах: во-первых, у вашей программы нет к нему никакого доступа. Вообще и в принципе это невозможно. Там орудует только операционная система, но не вы. Если вы попробуете обратиться к памяти в этом разделе, то получите просто access violation. Во-вторых, особенность раздела в том, что он разделяется между всеми программами. Да, вот так: пользовательская часть у каждого адресного пространства своя, но часть ядра — одна и та же, общая. По сути, раздел ядра является «адресным пространством режима ядра».
Какой размер имеют эти две части адресного пространства? Ну, если мы говорим про 32
-разрядную программу, то пользовательский раздел занимает от 2
до 4
Гб (по умолчанию — 2
Гб). Соответственно, режим ядра занимает от 0
до 2
Гб (ибо суммарно должно быть 4
Гб). Конечно же, это за вычетом уже упоминаемых специальных областей. Итого: по умолчанию адресное пространство 32
-разрядной программы делится пополам. Половина — вам, и половина — операционной системе.
(примечание: 0 Гб под режим ядра — это специальный особый случай, достижимый только при запуске 32-битной программы на 64-битной машине. В обычных условиях граница между разделами может двигаться от 2 до 3 Гб).
Если говорить совсем точно, то раздел для ваших данных в случае 32
-х бит имеет диапазон $0000FFFF-$7FFEFFFF
(или $BFFFFFFF
в максимуме на 3 Гб, с дыркой на 64
Кб в районе 2
Гб), а раздел режима ядра — $80000000-$FFFFFFFF
(или $C0000000-$FFFFFFFF
в максимуме для user mode). В случае 64
-разрядной программы ситуация будет несколько иная. На сегодняшний день в Windows соотношение выглядит так: user mode — $00000000'00010000-$000003FF'FFFEFFFF
(8
Тб); kernel mode — $00000400'00000000-$FFFFFFFF'FFFFFFFF
. Ну, это всё ещё недостаточно точно, ведь, на самом деле, режим ядра в случае 64
-х бит использует только максимум несколько сотен Гб, оставляя большую часть адресного пространства попросту неиспользуемой. Т.е. у нас в дополнение к двум областям (user mode и kernel mode) появляется ещё и третья: зарезервированная область. Которую, впрочем, со стороны user mode удобно считать частью kernel mode. Сделано это по той простой причине, что 64
-битное адресное пространство настолько огромно, что user mode и kernel mode выглядели бы в нём тонюсенькими полосочками, вздумай бы вы изобразить их графически и в масштабе. А если место просто зарезервировано, то и не нужно делать для него управляющих данных. Даже 8
Тб памяти для user mode — это очень много. Если бы вы выделяли мегабайт памяти в секунду, у вас бы ушло три месяца, чтобы исчерпать такое адресное пространство.
Это что касается изолированности одной программы от других и от операционной системы. Внутри программы её модули (exe, DLL, bpl) друг от друга, вообще говоря, никак не изолированы. Однако на практике граница всё же появляется, но связана она с языковыми различиями и особенностью управления памятью в разных языках программирования. Но это разговор для другого раза.
Если вы забудете всё то, что я тут говорил, то вот факт, который вы должны вынести из этого обсуждения: размер памяти программы ограничен 2 Гб (32-битная программа) или 8 Тб (64-битная программа), либо суммарным размером оперативной памяти и файлом подкачки — смотря что меньше, а что больше. Т.е. на практике вы получаете «out of memory» только когда превышаете размер в 2 Гб.
Операции, производимые с виртуальной памятью
Ну, вполне очевидно, что прежде чем использовать память, вы должны её выделить (commit), а после окончания работы — освободить (release). Конечно, вам не обязательно делать это в явном виде — как я уже сказал, часто за вас это делает кто-то другой автоматически. Но об этом в следующий раз.
Помимо двух операций (выделения и освобождения памяти) существует и третья операция — резервирование (reserve) памяти. Смысл её заключается в том, что под зарезервированную виртуальную память не выделяется никакой реальной памяти (будь то оперативная память или файл подкачки), но при этом память считается занятой, как если бы она была выделена. Позднее, вы можете выделить реальную память этому зарезервированному блоку (полностью или частями).
Зачем нужна такая операция? Ну, предположим, вам нужен непрерывный блок памяти для работы (к примеру, чтобы обработать его за один проход одним циклом), но вы выделяете память не сразу а частями — по мере надобности. Вы не можете просто выделить первый блок, а потом — второй: ведь тогда нет гарантии, что они будут идти друг за другом. Вот поэтому и придумали операцию резервирования: вы резервируете достаточно большой регион. Это — «бесплатно». Потом вы выделяете в нём реальную память. Обе цели достигнуты: вы и выделяете память по мере необходимости (а не сразу целиком), и вы получаете свою непрерывную область памяти.
Кстати, все три операции выполняются функциями VirtualAlloc
и VirtualFree
. Не забудьте только, что мы говорили про гранулярность выделения памяти в 64
Кб.
И снова: какое это имеет отношение к Delphi?
Ну, почти самое прямое. Ведь программа на Delphi должна выделять и освобождать память. Это значит, что ей нужно вызывать функции VirtualAlloc
и VirtualFree
. А выделять память она будет в своём (виртуальном) адресном пространстве — причём, только в пользовательской его части.
Операции с памятью в Delphi проводятся через функции GetMem
и FreeMem
. Конечно же, кроме этих функций в Delphi существует и много других — но они являются лишь обёртками или переходниками к GetMem
и FreeMem
. Эти обёртки (например: AllocMem
, New
, Dispose
, SetLength
и т.п.) предоставляют дополнительную функциональность и удобство (кстати, в системе тоже есть обёртки к вызовам VirtualAlloc
и VirtualFree
). В некоторых случаях, эти вызовы и вовсе скрыты и происходят автоматически под капотом языка. Например, при сложении двух строк:
var S1, S2, S3: String; begin S1 := S2 + S3;
вы не видите вызов GetMem
, но он здесь есть.
Зачем нужны «свои» подпрограммы управления памятью? Почему нельзя просто использовать VirtualAlloc
и VirtualFree
? Ну, Delphi тут не уникальна — большинство языков используют т.н. менеджеры памяти — это код, который в Delphi стоит за вызовами GetMem
и FreeMem
, который служит переходником к VirtualAlloc
и VirtualFree
. А делается это по причине всё той же гранулярности выделения в 64
Кб. Т.е. если вы создаёте 100
объектов по, скажем, 12
байт, то вместо двух килобайт (12
б * 100 = 1.2
Кб + служебные данные менеджера памяти) вы занимаете уже почти 6.5
Мб (64 * 100 = 6'400
Кб) — на несколько порядков больше! Использовали бы вы VirtualAlloc — вы бы очень быстро исчерпали свободную память. Менеджер памяти же «упаковывает» несколько запросов на выделение памяти в один блок.
(примечание: «упаковка» ни в коем случае не означает «сжатие» или «кодирование» — это просто размещение нескольких маленьких кусочков памяти в одном 64 Кб блоке).
Заметьте, что операции резервирования памяти у Delphi нет, т.к. подобная операции не имеет большого смысла при «упаковке» запросов менеджером памяти. Для работы с резервированием используются функции операционной системы.
Продолжение следует…
Вот и все базовые сведения про устройство памяти в Windows, которые вам нужно знать для начала. В следующий раз мы более близко посмотрим на то, как архитектура памяти соотносится с переменными в ваших программах.
См. также: Архитектура памяти в Windows: мифы и легенды (spin-off).
Читать далее: Адресное пространство под микроскопом.
Оперативная память: зачем нужна и как выбрать для ПК и ноутбука
ОЗУ является важным компонентом сложных электронных устройств. Без нее смартфоны, планшеты и ПК просто не смогли бы работать. Узнайте, зачем нужна оперативная память и ее место в девайсах.
Владимир Пантелеев
Основатель PulsePC
Что такое оперативная память
Как работает
Типы оперативной памяти
Характеристики
Как выбрать
Где посмотреть ОЗУ в Windows
Мнение эксперта
Главное
Что такое оперативная память
Как работает
Типы оперативной памяти
Характеристики
Как выбрать
Где посмотреть ОЗУ в Windows
Мнение эксперта
Главное
Без оперативной памяти не запустится ни игра, ни браузер, ни даже сама операционная система. В этой статье мы разберемся, как работает ОЗУ, какие типы существуют, почему важен ее объем и как выбрать оптимальный вариант при сборке ПК или выборе смартфона.
Что такое оперативная память
Оперативная память (ОЗУ, RAM — Random Access Memory) — это временное хранилище данных, которое обеспечивает быстрый доступ к информации для процессора. В отличие от постоянной памяти (жесткого диска или SSD), ОЗУ энергозависимая: при выключении устройства все данные из нее стираются.
Представьте, что ОЗУ — это ваш рабочий стол. Чем он больше, тем больше документов, инструментов и файлов можно разместить под рукой, не заглядывая в шкаф (хранилище). Именно поэтому от объема и скорости оперативной памяти напрямую зависит производительность системы: запуск программ, обработка видео или плавность видеоряда в играх.
Как работает оперативная память
Мы не будем углубляться в сложные технические термины и постараемся объяснить работу ОЗУ простым и понятным языком. Когда вы включаете компьютер или телефон, операционная система и приложения загружаются из хранилища в ОЗУ. Процессор обращается к этим данным для выполнения задач.
Например, при редактировании фото все изменения сначала сохраняются в оперативной памяти, а на накопитель записываются только после команды «Сохранить».
Ключевые этапы работы ОЗУ:
- Запрос данных: Процессор отправляет запрос на чтение информации.
- Поиск в кэше: Если данных нет в кэше процессора, они ищутся в ОЗУ.
- Передача информации: Найденные данные передаются процессору для обработки.
- Освобождение места: После завершения задачи память очищается для новых операций.
Чем выше частота и объем, тем быстрее ОЗУ реагирует на запросы процессора и обрабатывает их. Таким образом, ОЗУ служит мостом между хранилищем и процессором.
Типы оперативной памяти
Разберем типы ОЗУ по нескольким критериям.
По технологии хранения данных
- Требует постоянного обновления заряда.
- Дешевле в производстве.
- Используется в большинстве ПК и ноутбуков (DDR4, DDR5).
- Не нуждается в регенерации данных.
- Быстрее и дороже DRAM.
- Применяется в кэше процессоров.
По форм-фактору
Здесь так же есть два типа:
- DIMM: Модули для настольных ПК (длина 133 мм).
- SO-DIMM: Компактные платы для ноутбуков и мини-ПК (67 мм).
По типу модуля
Типы памяти различаются по частоте и напряжению. Чем современнее ОЗУ, тем выше частоты и ниже энергопотребление. Актуальных типов сейчас три:
- DDR3: до 2133 МГц, напряжение около 1.5 В.
- DDR4: до 3200 МГц, напряжение около 1.2 В (энергоэффективнее).
- DDR5: от 4800 МГц, напряжение около 1.1 В (актуальный стандарт).
По системе охлаждения
Производительные плашки оперативной памяти требуют улучшенного охлаждения. В связи с этим на многих моделях производители устанавливают радиаторы охлаждения. Также для последних поколений разработаны специальные контуры для установки систем жидкостного охлаждения на плашки ОЗУ.
Основные характеристики оперативной памяти
Расскажем про основные параметры ОЗУ.
Объем
Определяет, сколько данных может хранить ОЗУ одновременно. Минимум для Windows 10/11 — 4 ГБ, но для комфортной работы требуется 8−16 ГБ. Для игр рекомендуется устанавливать от 16 ГБ оперативной памяти.
Тактовая частота
Измеряется в МГц. Чем выше частота, тем быстрее передаются данные. Например, DDR4−3200 работает на 3200 МГц. Каждое поколение имеет ограничения по максимальным частотам и запас для разгона. Например, плашки оперативной памяти DDR4 с частотой 2400 МГц могут быть разогнаны до 3200 МГц, а некоторые и больше.
Тайминги
Тайминги показывают задержки между операциями (CL, tRCD, tRP). Чем выше частота ОЗУ и ниже тайминги, тем выше общая производительность оперативки. Например, CL16 лучше CL18 при одинаковой частоте. Продвинутые пользователи ПК и геймеры часто прибегают к ручной корректировке таймингов для повышения производительности системы.
Напряжение
Современные модули (DDR4, DDR5) потребляют меньше энергии, что важно для ноутбуков и прочих мобильных устройств. Выше мы уже упоминали про типы и требования по напряжению:
- DDR3 — напряжение для работы составляет около 1.5 В.
- DDR4 — напряжение для работы составляет около 1.2 В.
- DDR5 — напряжение для работы составляет около 1.1 В.
Сколько ГБ оперативной памяти нужно
Поясним про необходимые объемы ОЗУ.
На компьютере или ноутбуке
Сделаем несколько градаций по типам задач:
- 4−8 ГБ: Офисные задачи, браузер, простые приложения.
- 16−32 ГБ: Игры, монтаж видео, работа с графикой.
- От 32+ ГБ: 3D-рендеринг, виртуализация, профессиональные задачи.
На телефоне или планшете
На мобильных устройствах все немного проще:
- 4−6 ГБ достаточно под социальные сети и стриминг.
- 8−12 ГБ пригодятся для мобильных игр и многозадачность.
Как выбрать оперативную память для компьютера
Дадим несколько советов по выбору оперативной памяти для компьютера.
1. Проверьте совместимость компонентов ПК
Перед покупкой оперативной памяти проверьте, чтобы ваша материнская плата поддерживала нужный тип памяти. Дело в том, что из-за разницы в компоновке компонентов у вас не получится установить память DDR5 в слот для DDR4. Тип поддерживаемой ОЗУ можно посмотреть в технических характеристиках материнской платы. Также стоит помнить, что материнские платы могут отличаться по количеству слотов, в которые можно установить планки оперативной памяти. В потребительском сегменте это преимущественно две или четыре плашки.
2. Не забудьте про технические характеристики
Чем выше частота (МГц) и ниже тайминги, тем более производительной будет оперативная память. Всегда обращайте внимание на эти два важных параметра и не забудьте проверить требования по напряжению для стабильной работы ваших модулей.
3. Берите плашки из одних наборов
При выборе оперативной памяти мы рекомендуем обращать внимание на киты из нескольких модулей. Например, из двух или четырех. Реалии таковы, что даже плашки с одинаковым типом памяти от одного производителя могут отличаться чипами и некоторыми другими компонентами. Это может привести к ухудшению производительности компьютера, регулярным вылетам и синим экранам смерти. Лучше взять набор из нескольких одинаковых планок в одной упаковке и в дальнейшем не беспокоиться о совместимости.
4. Используйте плашки парами
В двухканальном режиме (когда работают по 2 плашки) оперативная память работает быстрее. Поэтому лучше взять 2 по 16 ГБ, чем 1 на 32 ГБ.
5. Проверьте поддержку дополнительных модулей (для ноутбуков)
Многие современные ноутбуки, помимо уже имеющейся оперативной памяти, имеют свободные слоты под модернизацию и увеличение объема ОЗУ. Если заводской производительности вам недостаточно, и вы хотите прокачать свой ноутбук, перед покупкой оперативной памяти внимательно изучите спецификации лэптопа, возможность установки модулей в слоты и их наличие.
Где можно посмотреть свою ОЗУ в Windows
Проверить ОЗУ можно с помощью встроенных инструментов Windows. Для примера мы взяли ОС Windows 10 Pro:
- Наведите курсор мыши на панель задач (полоса в нижней части экрана).
- Нажмите правой кнопкой мыши и выберите «Диспетчер задач».
- Выберите вкладку «Производительность».
- Нажмите на раздел «Память».
В данном разделе можно увидеть графики загруженности и структуру памяти, ее объем, количество использованных гнезд в материнской плате и ряд других параметров.
Мнение эксперта
Специально для Hi-Tech Mail про оперативную память рассказал Владимир Пантелеев, владелец мастерской PulsePC.
Сборки с какими типами ОЗУ (DDR5, DDR4, DDR3) сейчас пользователи выбирают чаще всего
DDR5 активно набирает популярность, особенно для новых платформ Intel (LGA 1700) и AMD (AM5). Многие выбирают DDR5−6000+ из-за высокой пропускной способности. DDR4 все еще востребована, особенно для AM4. Это более доступное решение с хорошим соотношением цена/производительность для недорогих конфигураций. DDR3 используется в безумных сборках с китайской вторички, те самые Xeon на 2011−3.
Кого из производителей ОЗУ можно порекомендовать читателям, кто выпускает самую качественную оперативку
Это сложный вопрос, ведь нет какого-то хорошего или плохого производителя. Один и тот же бренд может выпустить модули на Hynix A-DIE, Samsung или Micron. Я бы в принципе рекомендовал покупателю выбирать память не по производителю, а по чипам, частоте и таймингам. Тем не менее, я отмечу несколько известных брендов, к которым лично у меня нет вопросов:
G.Skill, Kingston, Corsair, ADATA, TEAMGROUP и набирающий популярность китайский бренд KingBank.
Сейчас на рынке много видов оперативки с красивыми радиаторами, подсветкой, прочими модификациями. Стоит ли обращать внимание на данные модели или можно поставить простые плашки без всего
Мы придерживаемся простого правила: если сборка с подсветкой, то и память с подсветкой, а если сборка строгая, то и память без «светяшек».
Радиатор рекомендуется, если память работает на высокой частоте (DDR4−3200+, DDR5−6000+) и подвергается нагрузкам (игры, рендеринг). Он улучшает охлаждение и продлевает срок службы. Тут правило простое: память с радиатором лучше, чем память без радиатора.
Стоит ли разгонять оперативную память
Если коротко, то да, при наличии свободного времени. Разгон памяти — это сложный кропотливый процесс ручного подбора частоты, таймингов и напряжения, требующий многочисленных продолжительных тестов. В разгоне нет простой формулы, это всегда длительная сложная процедура. Для большинства простых пользователей я рекомендую остаться на XMP (EXPO) профиле и сэкономить себе время и нервы, а для энтузиастов разгон — это хороший способ повысить производительность компьютера.
Можете ли вы дать несколько советов по обслуживанию ОЗУ для обычных пользователей
Держать компьютер в чистоте и быть уверенным, что компоненты хорошо продуваются и не подвержены перегреву. И главное правило: работает — не трогай!
Главное об оперативной памяти
Подведем итоги всего вышеперечисленного:
- ОЗУ — временное хранилище данных для быстрого доступа процессора.
- Объем важнее частоты для большинства задач, но в играх и профессиональных приложениях критичны оба параметра.
- DDR5 — актуальный стандарт, но DDR4 остается выгодным выбором для бюджетных сборок.
- 16 ГБ — оптимальный объем для ПК в 2025 году.
- Двухканальный режим ускоряет работу системы.
Выбирая оперативную память, ориентируйтесь на свои задачи и проверяйте совместимость с железом. И помните: даже самая быстрая ОЗУ не компенсирует слабый процессор или медленный накопитель.
Last Updated :
01 Feb, 2022
The memory management in the operating system is to control or maintain the main memory and transfer processes from the primary memory to disk during execution. Memory management keeps track of all memory locations, whether the process uses them or not. Determines how much memory should be allocated to each process. Specifies how much memory each process should be given. It decides which processes will be remembered and when. It tracks when memory is released or when it is shared and changes the status accordingly.
Windows Memory Management
Microsoft Windows has its own virtual address space for each 32-bit process, allowing up to 4 gigabytes of memory to be viewed. Each process has 8-terabyte address space on 64-bit Windows. All threads have access to the visible address space of the process. Threads, on the other hand, do not have access to the memory of another process, which protects one process from being damaged by another.
Architecture for 32-bit Windows: The automatic configuration of the 32-bit Windows Operating System (OS) allocates 4 GB (232) of accessible memory space to the kernel and user programs equally. With 4 GB physical memory available, the kernel will receive 2 GB and the app memory will receive 2 GB. Kernel-mode address space is shared by all processes, but application mode access space is provided for each user process.
Architecture for 64-bit Windows: The automatic configuration of the 64-bit Windows Operating System (OS) allocates up to 16 TB (254) of accessible memory space to the kernel and user programs equally. As 16 TB real memory is available, the kernel will have 8 TB of virtual address (VA) space and user application memory will have 8 TB of VA space. Visible address space in the kernel is allocated for all processes. Each 64-bit functionality gets its place, but each 32-bit system works on a 2 GB (Windows) virtual machine.
Virtual Address Space
The process’ visible address space is the range of memory addresses that you can use. The address area of each process is private, and can only be accessed through other processes if it is shared.
A virtual address does not reflect the actual location of an object in memory; instead, the system stores a table for each process, which is an internal data structure that converts visible addresses into local addresses. The program converts the virtual address into a local address every time the chain refers to it.
The virtual address area of Windows is divided into two parts: one for process use and the other for system usage.
Virtual Memory Functions
A process can alter or determine the state of pages in its virtual address space using virtual memory functions.
The width of the visible address space is reserved for the process. Although saving address space does not provide material storage, it prevents scope from using other sharing processes. It does not affect other active address spaces for other processes. Page storage reduces unnecessary use of virtual storage while allowing the process of setting aside part of its address space for the flexible data structure. As required, the procedure can provide a physical repository for this area.
Provide a set of cached pages in the address of the process so that only a shared process can access real storage (either RAM or disk).
For the most dedicated pages, specify read/write, read-only, or no access. This differs from the general distribution procedures, which often provide read/write access to the pages.
Release a set of saved pages, making the visible address set accessible for the following call process sharing actions.
We can withdraw a group of committed pages, freeing up portable storage that can be assigned to any process in the future.
To prevent the program from changing pages in the file, lock one or more memory pages bound to the virtual memory (RAM). Find information about a set of pages in a call process or the address space of a specific process. It may change the access protection of a set of pages bound to the physical address of the call process.
Heap Functions
The system provides a default heap for each process. Private heaps can help applications that make frequent allocations from the heap perform better. A private heap is a block of one or more pages in the caller process’s address space. After constructing the private heap, the process manages the memory in it via operations like HeapAlloc and HeapFree.
File Mapping
The association of file content with a piece of visible address space in the process is known as a file map. To track this relationship, the system creates a file map maker (also known as a category object). File view is the physical address area are used for the file content access process. The process may use both input and outgoing sequences (I/O) thanks to the file map. It also allows the process to work effectively with large data files, such as websites, without requiring the entire file to be mapped to memory. Files with a memory map can be used with many processes to exchange data.