Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Вниз

Виртуальная память, оперативная память   Найти похожие ветки 

 
Washington ©   (2007-12-27 06:58) [0]

Я так понял: прога при запуске грузится в ОЗУ. А если ОЗУ будет недостаточно, то она начнёт использовать виртуальную память? Или ошибка вылезет?


 
Loginov Dmitry ©   (2007-12-27 07:55) [1]

> Я так понял: прога при запуске грузится в ОЗУ. А если ОЗУ
> будет недостаточно, то она начнёт использовать виртуальную
> память?


Не программа начнёт "использовать виртуальную память", а ОС выгружает неиспользуемые странички памяти в файл подкачки (или же их полностью освобождает). Т.е. под твою прогу в ОЗУ будет освобождено по возможности достаточно место.

> Или ошибка вылезет?


Ошибка может вылезти, если файл подкачки отключен, либо он полностью забит.


 
Washington ©   (2007-12-27 08:21) [2]

То есть надо проверять свободную память в файле подкачки?


 
Skyle ©   (2007-12-27 08:22) [3]

Вся память виртуальная.

Какая конкретно задача стоит?


 
Григорьев Антон ©   (2007-12-27 08:30) [4]

Всё адресное пространство приложения - виртуальное. Оно разбито на блоки, размер которых зависит от версии ОС (для NT 4 это 4 Кб, для Win 2000 - 64 Кб, для остальных - не знаю). И существует таблица, которая показывает, какой странице виртуальной памяти какая часть физической соответствует. У каждого процесса такая таблица своя, поэтому адресные пространства различных процессов оказываются изолированными друг от друга. Если программа работает с той частью виртуальной памяти, которая через эту таблицу отображена на физическую, всё нормально. Если программа пытается обратиться к той памяти, которой никакая физическая память не соответствует, возникает исключение, которое обрабатывает система. Система проверяет, почему виртуальному адресу не соответствует физическая память. Если оказывается, что данный блок никогда не был отображён на физическую память, и программа просто использует ошибочный адрес, выкидывается исключение Aceess violation. Но может возникнуть и другая ситуация. Когда оперативной памяти не хватает, часть информации из неё сбрасывается в своп-файл (система старается выбрать для этого те области памяти, к которым давно не было обращения, и они не используются), информация об этом сохраняется где-то в системе, а в таблице соответствующего процесса уничтожается запись о том, что на эту область физической памяти было что-то отображено, а соответствующий участьк ОЗУ будет использован для какого-нибудь другого процесса. И теперь, когда первый процесс обратиться к выгруженной таким образом памяти, система получит исключение, обнаружит, что память, вообще-то, была отображена, но затем выгружена на диск, найдёт в ОЗУ место (если его не будет хватать, на диск будут выгружен другой блок памяти), загрузит туда данные из своп-файла, поправит таблицу процесса, поставив в соответствие требуемому блоку виртуальной памяти нужный блок физической, и процесс продолжит работу так, как будто там с самого начала были нужные данные.


 
Washington ©   (2007-12-27 08:30) [5]

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


 
Washington ©   (2007-12-27 08:32) [6]


> Григорьев Антон ©   (27.12.07 08:30) [4]

Жесть :)


 
Сергей М. ©   (2007-12-27 10:07) [7]


> Washington ©   (27.12.07 08:30) [5]


Не надо ничего предусматривать - ОС позаботится об этом сама.


 
homm ©   (2007-12-27 10:14) [8]

> [0] Washington ©   (27.12.07 06:58)
> Я так понял: прога при запуске грузится в ОЗУ. А если ОЗУ
> будет недостаточно, то она начнёт использовать виртуальную
> память? Или ошибка вылезет?

Вся память, досупная твоей проге только лишь виртуальная.


 
Washington ©   (2007-12-27 10:16) [9]

Спасибо за помощь


 
homm ©   (2007-12-27 10:19) [10]

> [1] Loginov Dmitry ©   (27.12.07 07:55)
> Ошибка может вылезти, если файл подкачки отключен, либо
> он полностью забит.

Если файл подкачки отключен и памяти не хватает, он создастся.


> [4] Григорьев Антон ©   (27.12.07 08:30)
> для NT 4 это 4 Кб, для Win 2000 - 64 Кб

По моему ты чтото путаешь. Насколько я знаю страница win32 на PC равна 4 кб.


> [4] Григорьев Антон ©   (27.12.07 08:30)

Надо просто на дообразование отправлять :) Стока писать по чем зря — это жесть :)


 
Washington ©   (2007-12-27 10:53) [11]


> Стока писать по чем зря — это жесть :)
True


 
www   (2007-12-27 11:05) [12]


> прога при запуске грузится в ОЗУ.

грузится она не вся, а только то, что нужно в данный момент


 
han_malign ©   (2007-12-27 15:39) [13]

offtop

> Насколько я знаю страница win32 на PC равна 4 кб.
>

все намного прозаичнее:
в защищенном режиме процессоров x86(начиная c 386) - 32-битный адрес состоит из:
10-бит - индекс таблицы страниц в каталоге таблиц
10-бит - индекс дексриптора блока в таблице страниц(вот в этом дескрипторе  уже находятся флаги и физический адрес страницы)
12-бит - смещение внутри страницы
указатель на каталог таблиц страниц лежит в сегментном регистре(для Win32 линейная организация памяти - исполльзуется только один каталог CS=DS=ES=SS, за исключением FS - в котором находится  глобальный для всей системы  каталог кторый используется для межпроцессного обмена)
(http://www.codenet.ru/progr/os/RAM/RAM-2.php)

т.о. 4 кб - это аппартное ограниченине


 
Anatoly Podgoretsky ©   (2007-12-27 17:18) [14]

> Washington  (27.12.2007 06:58:00)  [0]

Неправильно понял, программа никогда не использует оперативную память, если это только не программа уровня 0



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
15-1198058066
Kerk
2007-12-19 12:54
2008.01.27
К проблеме ИИ


2-1198681178
fics
2007-12-26 17:59
2008.01.27
TCanvas (нарисовать стрелочку)


2-1199106232
VID
2007-12-31 16:03
2008.01.27
Выход на свойства компонента, имея его имя


2-1198515716
Dark
2007-12-24 20:01
2008.01.27
SW_HIDE


2-1197658894
Unicode
2007-12-14 22:01
2008.01.27
Как вводить символы Unicode в окно редактора кода и в приложения?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский