Название: Доступная оперативная память? Отправлено: alexman от Апрель 26, 2010, 20:34 Как узнать объем доступной оперативной памяти?
Название: Re: Доступная оперативная память? Отправлено: Alex Custov от Апрель 26, 2010, 21:12 в каждой ОС по-разному. Тебе в какой?
Название: Re: Доступная оперативная память? Отправлено: alexman от Апрель 26, 2010, 21:16 А кроссплатформенного решения нет?
Название: Re: Доступная оперативная память? Отправлено: BRE от Апрель 26, 2010, 21:29 А что ты понимаешь под доступной оперативной памятью и для чего тебе нужна эта информация?
Название: Re: Доступная оперативная память? Отправлено: alexman от Апрель 26, 2010, 21:43 Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!?
Название: Re: Доступная оперативная память? Отправлено: BRE от Апрель 26, 2010, 21:53 Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!? Процесс работает в виртуальном адресном пространстве. Сколько страниц физической памяти ему в данный момент предоставит ОС зависит только от нее. В следующий момент она может выгрузить большую часть страниц в своп и отдать физическую память другому процессу.По большому счету эта информация бесполезна. IMHO, лучше выбирать размер кусков, основываясь на других соображениях. Название: Re: Доступная оперативная память? Отправлено: alexman от Апрель 26, 2010, 22:07 Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!? Процесс работает в виртуальном адресном пространстве. Сколько страниц физической памяти ему в данный момент предоставит ОС зависит только от нее. В следующий момент она может выгрузить большую часть страниц в своп и отдать физическую память другому процессу.По большому счету эта информация бесполезна. IMHO, лучше выбирать размер кусков, основываясь на других соображениях. Название: Re: Доступная оперативная память? Отправлено: Igors от Апрель 27, 2010, 09:38 По большому счету эта информация бесполезна. IMHO, лучше выбирать размер кусков, основываясь на других соображениях. Совершенно верно. Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!? Буфер 4-6 Mb вполне достаточно. Больший буфер прироста в скорости не даст.Ну или, например, если мы хотим, чтобы наше приложение занимало в оперативке памяти не больше определенной константы! Это лучше задать на старте основываясь на размере физической памяти (напр 80%) и позволить пользователю менять это значение. И распределять основываясь на этом. Информация, полученная от ОС. будет динамична/неустойчива, напр. в какой-то момент памяти может быть мало (что-то мощное стартовало) и.т.п.Название: Re: Доступная оперативная память? Отправлено: alexman от Апрель 27, 2010, 09:46 ]Это лучше задать на старте основываясь на размере физической памяти (напр 80%) и позволить пользователю менять это значение. Спасибо! Это понял!Название: Re: Доступная оперативная память? Отправлено: BRE от Апрель 27, 2010, 12:25 ]Это лучше задать на старте основываясь на размере физической памяти (напр 80%) и позволить пользователю менять это значение. Спасибо! Это понял!Предположим, что платформа 32 битная. На машине установлено 512 Мб оперативной памяти, я очень сильно сомневаюсь, что приложение получит 80% от нее (имеется ввиду физическая память), ОС найдет ей другое применение. Или на машине установлено 32 Гб оперативки, приложение физически (без дополнительных телодвижений) не сможет адресовать больше 4 Гб (а на самом деле в зависимости от ОС - 2 или 3 Гб). Короче, не морочь себе пейсы. :) Название: Re: Доступная оперативная память? Отправлено: Igors от Апрель 27, 2010, 15:28 Да не нужно привязываться к физической памяти. Эта величина тоже ничего не дает. Дает. Разумеется, для 32-битного подсекаем размер физической памяти до 2 Gb. А вот если стоит всего 512, то ОС будет выделять, скажем, 1 Gb и больше - но с очень печальными последствиями. В 64-битах ситуация та же но в большем масштабе.Короче, не морочь себе пейсы. :) Не морочу ввиду отсутствия таковых :) Название: Re: Доступная оперативная память? Отправлено: BRE от Апрель 27, 2010, 15:34 Дает. Разумеется, для 32-битного подсекаем размер физической памяти до 2 Gb. А вот если стоит всего 512, то ОС будет выделять, скажем, 1 Gb и больше - но с очень печальными последствиями. В 64-битах ситуация та же но в большем масштабе. Ну так а что в таком случае дает? :)Если стоит 512 Мб, то 80% от нее ты вряд-ли получишь. Тогда для чего все это? Название: Re: Доступная оперативная память? Отправлено: Igors от Апрель 27, 2010, 15:49 Ну так а что в таком случае дает? :) Можно "получить" (то есть выделить) и 160%. а когда и 300% :) Разумеется я не узнаю "что" я получил, реальная ли это память или страницы на диске. Мне важно знать стОит ли выделять больше памяти или уже пришла пора обработать часть данных, выдать результаты и затем заниматься следующей порцией (пусть с накладными расходами). Если стоит 512 Мб, то 80% от нее ты вряд-ли получишь. Тогда для чего все это? Название: Re: Доступная оперативная память? Отправлено: BRE от Апрель 27, 2010, 15:51 Мне важно знать стОит ли выделять больше памяти или уже пришла пора обработать часть данных Как ты это узнаешь? Особенно опираясь на размер физической памяти.Название: Re: Доступная оперативная память? Отправлено: Igors от Апрель 27, 2010, 16:08 Мне важно знать стОит ли выделять больше памяти или уже пришла пора обработать часть данных Как ты это узнаешь? Особенно опираясь на размер физической памяти.Код: size_t numLines = (MaxMem() - MemAllocated()) / lineSize; Название: Re: Доступная оперативная память? Отправлено: BRE от Апрель 27, 2010, 16:15 Просто вычисляем предельное (максимальное) значение один раз на старте. Ведем статистику сколько уже распределено. Сравниваем выделено - предел, напр. Так а какое максимальное значение будет для 256, 512, 768, 1024, ... МбИ почему ты думаешь, что при запуске одной и той же программы на одном и том же железе, ОС будет предоставлять одинаковое количество физической памяти? Что пытаемся достичь такими расчетами размера буфера, если в любой момент времени ОС может забрать всю физическую память этого буфера выгрузив его в своп? Для чего все это? |