Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение памяти для приложения 
:(
    Опции темы
Anikmar
Дата 23.3.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Когда приложение запускается операционной системой выделяется непрерывный блок памяти, размер которого зависит от ОС. В 32-разрядных приложению доступно 2 Гб памяти, причем для приложения совершенно неважно где физически эта память находится - это просто кусок памяти. ОС берет на себя ответственность по свопу.
Более подробно про виртуальную память можете посмотреть Здесь
PM MAIL ICQ   Вверх
yngwie19
Дата 23.3.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Anikmar, Спасибо за ссылку, дак чтож это получается, когда мы посим выделить место для паременной например
Код

char nVar;

то программа займет не 1 байт а 4 кб, все из-за того что память выделяется страницами ? 
PM MAIL   Вверх
GoldFinch
Дата 23.3.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Цитата(Anikmar @  23.3.2009,  13:58 Найти цитируемый пост)
Когда приложение запускается операционной системой выделяется непрерывный блок памяти, размер которого зависит от ОС.

не пишите того чего не знаете, когда приложение (.ехе) запускается, операционной системой выделяется столько виртуальных кусков памяти, сколько секций в файле, +1 страница на заголовок файла, у большинства файлов получается действительно непрерывный кусок размером SizeOfImage байт. Потом система грузит длл из таблицы импорта, если они еще не загружены - это еще несколько кусков памяти в разных местах виртуальной памяти.
В физической памяти - эти страницы могут располагаться как угодно, в любом порядке, в ОЗУ или на ЖД. 
PM MAIL ICQ   Вверх
Anikmar
Дата 23.3.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

GoldFinch
не пишите того чего не знаете, когда приложение (.ехе) запускается, операционной системой выделяется столько виртуальных кусков памяти, сколько секций в файле, +1 страница на заголовок файла, у большинства файлов получается действительно непрерывный кусок размером SizeOfImage байт. Потом система грузит длл из таблицы импорта, если они еще не загружены - это еще несколько кусков памяти в разных местах виртуальной памяти.
В физической памяти - эти страницы могут располагаться как угодно, в любом порядке, в ОЗУ или на ЖД. 

При чем здесь настройка конкретного exe? В едином блоке, который выделяется процессу разные куски отводятся под разные цели. Я говорю о чисто виртуальной памяти, по умолчанию (без флага 3GB) процессу отводится 2GB памяти с адресами 0 до 0x7FFFFFFF. Именно это я имел под непрерывностью. 
Естественно память разбивается на куски, каждый из которых имеет свои харакетристики - код, статически данные, куча, это все может быть где угодно в пределах этих 2Gb

В физической памяти располагаться все может как угодно, я что с этим когда-нибудь спорил?
PM MAIL ICQ   Вверх
GoldFinch
Дата 23.3.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Anikmar, процессу эти 2Гб не отводятся, а предоставляется адресное пространство в 2Гб где он теоретически может чтото расположить. при этом сама виртуальная память процессу не предоставляется, он должен ее выделить перед тем как начнет там читать\писать.
вы понимаете разницу между адресным пространством и реально доступной памятью?
PM MAIL ICQ   Вверх
Anikmar
Дата 23.3.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

GoldFinch
Anikmar, процессу эти 2Гб не отводятся, а предоставляется адресное пространство в 2Гб где он теоретически может чтото расположить. при этом сама виртуальная память процессу не предоставляется, он должен ее выделить перед тем как начнет там читать\писать.
вы понимаете разницу между адресным пространством и реально доступной памятью? 
 

Как я уже раньше сказал - у меня проблема с терминологией. Естественно я не имел в виду, что выделяется сама память. Естественно адресное пространство, вы абсалютно правы. Совершенно не значит, что получив управление, приложение может взять любой адрес и писать туда что захочет - сначала память необходимо выделить. И выделить сразу 2Гб одним блоком не получится - такого блока просто не будет.
Конечно я имел в виду под фразой "операционной системой выделяется непрерывный блок памяти" именно адресацию, а не собственно физически память (косноязыкий я иногда бываю, что поделаешь). Я и удивился, что вы начали спорить. 

Цитата

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


Кстати по поводу DLL - а разве они не в память ОС грузятся? Я считал, что они грузятся за пределы 2Г


PM MAIL ICQ   Вверх
Rififi
Дата 23.3.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



Anikmar, 
Читай книгу Рихтера, там всё описано что и куда грузится.
PM MAIL   Вверх
Anikmar
Дата 23.3.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

Rififi
Anikmar, 
Читай книгу Рихтера, там всё описано что и куда грузится. 


А что этой информацией только Рихтер владеет?  smile 

Естественно, когда мне эта информация понадобится - я ее найду достаточно быстро. Этот вопрос я задал по ходу диалога - чисто из любопытства. Я не помню откуда у меня эти данные (не от Рихтера точно) - я считал, что DLL грузятся в память, отведенную для ОС - поверх этих злосчастных 2Г. Причем я не претендую на достоверность своих знаний именно в этой части  smile 
PM MAIL ICQ   Вверх
yngwie19
Дата 23.3.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Ребят а в чем прелесть файлов проецируемых в пямять?
PM MAIL   Вверх
Lazin
Дата 23.3.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Anikmar @  23.3.2009,  15:10 Найти цитируемый пост)
Кстати по поводу DLL - а разве они не в память ОС грузятся? Я считал, что они грузятся за пределы 2Г

запусти приложение под отладчиком, найди там Debug->Modules, и посмотри адреса, по которым загрузились библиотеки
Цитата(yngwie19 @  23.3.2009,  15:38 Найти цитируемый пост)
Ребят а в чем прелесть файлов проецируемых в пямять?

Википедия -> memory mapped file

Это сообщение отредактировал(а) Lazin - 23.3.2009, 16:05
PM MAIL Skype GTalk   Вверх
yngwie19
Дата 23.3.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Lazin, а на русском есть?
PM MAIL   Вверх
GoldFinch
Дата 23.3.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Anikmar, юзермодные модули в том числе длл грузятся в юзермодную часть памяти, системные длл обычно живут в верхних адресах памяти


yngwie19, прелесть этих файлов в том что ты работаешь с файлом как с памятью
PM MAIL ICQ   Вверх
yngwie19
Дата 23.3.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



повторю вопрос 
Цитата(yngwie19 @  23.3.2009,  14:11 Найти цитируемый пост)
дак чтож это получается, когда мы посим выделить место для паременной например

char nVar;

то программа займет не 1 байт а 4 кб, все из-за того что память выделяется страницами ?  



Это сообщение отредактировал(а) yngwie19 - 23.3.2009, 20:05
PM MAIL   Вверх
Rififi
Дата 23.3.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



Anikmar, 
А что этой информацией только Рихтер владеет?
Естессно, нет. Просто зачем искать другие книги, когда есть Мега-Книга? :gigi:
PM MAIL   Вверх
GoldFinch
Дата 23.3.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



yngwie19, из за того, что у тебя в программе и так есть куча глобальных переменных внутри встроенных библиотек языка, твоя 1-байтовая переменная вообще не изменит размер программы в памяти.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.