![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Всем привет. Меня интересует следующий вопрос. Много читал про то как организована память, и понял что пока это для меня очень сложно. Поэтому хочу у Вас спросить. Правда ли что при запуске программы, ей выделяется 4 Гб виртуальной оперативной памяти? если нет то объясните тогда сколько, а если да, то что делать если на компе установлен всего 1 Гб оперативки (или тут еще учавствует и пямять винчестера?)
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
yngwie19, Виртуальная память - это и есть использование винчестера - на то она и виртуальная
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Lazin, А здесь что не так сказал?
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Виртуальная память, это такой способ адресации, при котором, адрес участка памяти не зависит от того, где находятся данные, на диске или в оперативной памяти
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
А я как сказал? Если нет винчестера (внешнего носителя) - виртуальная память теряет смысл - так как любая страница отображается только на реальную память и виртуальности никакой по сути нет.
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ну почему-же, многие области памяти(физ) могут быть просто временно освобождены, даже если нет своп файла
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
И откуда они восстановятся когда понадобятся? Я создал объекты, некоторое время они не нужны - система свопит эти страницы на диск и ждет когда я к ним обращусь. Когда я к ним обращаюсь - система их восстанавливает. А если диска нет, как это она их освободит?! |
|||
|
||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 3 Всего: 22 |
Во первых не 4 гб. На 64-битных системах гораздо больше, а на 32-битных не стоит рассчитывать больше чем на 3 гб (около 1 гига система резервирует для себя). Теперь когда ты делаешь new или malloc, то система резервирует для тебя виртуальные адреса. Можно иметь на машине 32 мб оперативки а попросить у malloc 3 гига и тебе их дадут. Но как только ты начнешь читать/писать в этот массив, ОС начнет отображать виртуальные адреса на физическую память( RAM + swap) и если физической памяти недостаточно, то приложение получит привет от операционки. Если на машине установлено всего 1 гб оперативки, а хочется использовать больше, то можно создать достаточно большой своп, в этом случае ОС будет сбрасывать на диск неиспользуемые области памяти, но это очень сильно затормозит работу приложения и такого эффекта лучше избегать. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Anikmar, виртуальная память прекрасно работает и без каких либо внешних накопителей типа ЖД
это механизм проца и к ЖД он никакого отношения не имеет. если данные негде хранить кроме как в ОЗУ, они нигде больше и не хранятся суть виртуальной памяти в том, физическая память отображается в страницы виртуальной памяти, в результате можно юзать произвольные адреса в пределах доступного адресного пространства, и можно использовать одни и те же виртуальные адреса процессам находящимся в разных виртуальных адресных пространствах. Добавлено @ 12:59 в win32 юзермодному процессу доступно 2Гб 3 гига malloc'ом не выделить, 2.1 тоже, что характерно и 1.9 тоже не всегда Это сообщение отредактировал(а) GoldFinch - 23.3.2009, 13:01 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
а причем тут твои объекты, я имел ввиду исполняемый код, он же тоже загружается по каким-то виртуальным адресам |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Ясно я немного не понял предмета спора. Естественно принцип адресации остается, но дефакто без внешнего носителя - это бессмысленный механизм. Просто изначальная схема виртуальной памяти и придумана была из-за возможности свопа, реализуемого на самом низком уровне. Так что я не прав в формулировках. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Anikmar, самый низкий уровень это интересно что?
вы неповерите, но виртуальная память прекрасно работает и без свопа, пример тому - LiveCD и загрузка ОС по сети, а если физической памяти много, то кому нужен этот своп? |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Я же сказал - не точен в терминологии. Сам механизм обязан работать без свопа - это очевидно. Я имел в виду, что сам принцип был разработан именно для возможности подкачки страниц на уровне, максимально близком к процессору (к аппаратному) - чтобы дать возможность выделить приложениям памяти больше чем реально существет в системе (в смсыле ОЗУ, естественно). Отсюда и название Виртуальная память - т.е. она приложению выделена и приложение может к ней адресовываться, но физически в ОЗУ ее нет- она свопится на диск. Без диска (внешнего хранилища) механизм естественно работает, только смысл его теряется - так как приложению может быть выделено только столько памяти, сколько позволяет ОЗУ и без внешнего хранилища она становится виртуальной не по сути, а с точки зрения организации адресации. Под диском я имею в виду любое внешнее хранилище, на котором можно организовать своп. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Из всего вышесказанного Я понял следующее, что выртуальная память эта некий диапазон физически не существующих адресов, которые предоставляются приложению для хранения како-го либо объема информации (данных,кода и т.д). При запуске приложения выделятся диапазон адресов объемом (на 32-битных системах) около 3 Гб (1 Гб из которых отдается операционке, значит приложению доступно всего около 2 Гб ). Даннй объем виртуальной пямяти достигается за счет пямяти ОЗУ + файла подкачки, (т.е как Я понимаю участие HDD здесь реализовано только за счет определения файла подкачки). Поправьие что не так?
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |