Russian Qt Forum
Ноябрь 22, 2024, 22:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Доступная оперативная память?  (Прочитано 9633 раз)
alexman
Гость
« : Апрель 26, 2010, 20:34 »

Как узнать объем доступной оперативной памяти?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Апрель 26, 2010, 21:12 »

в каждой ОС по-разному. Тебе в какой?
Записан
alexman
Гость
« Ответ #2 : Апрель 26, 2010, 21:16 »

А кроссплатформенного решения нет?
Записан
BRE
Гость
« Ответ #3 : Апрель 26, 2010, 21:29 »

А что ты понимаешь под доступной оперативной памятью и для чего тебе нужна эта информация?
Записан
alexman
Гость
« Ответ #4 : Апрель 26, 2010, 21:43 »

Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!?
Записан
BRE
Гость
« Ответ #5 : Апрель 26, 2010, 21:53 »

Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!?
Процесс работает в виртуальном адресном пространстве. Сколько страниц физической памяти ему в данный момент предоставит ОС зависит только от нее. В следующий момент она может выгрузить большую часть страниц в своп и отдать физическую память другому процессу.
По большому счету эта информация бесполезна. IMHO, лучше выбирать размер кусков, основываясь на других соображениях.
Записан
alexman
Гость
« Ответ #6 : Апрель 26, 2010, 22:07 »

Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!?
Процесс работает в виртуальном адресном пространстве. Сколько страниц физической памяти ему в данный момент предоставит ОС зависит только от нее. В следующий момент она может выгрузить большую часть страниц в своп и отдать физическую память другому процессу.
По большому счету эта информация бесполезна. IMHO, лучше выбирать размер кусков, основываясь на других соображениях.
Ну или, например, если мы хотим, чтобы наше приложение занимало в оперативке памяти не больше определенной константы!
« Последнее редактирование: Апрель 26, 2010, 22:53 от alexman » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Апрель 27, 2010, 09:38 »

По большому счету эта информация бесполезна. IMHO, лучше выбирать размер кусков, основываясь на других соображениях.
Совершенно верно.

Например, я хочу загружать из большого файла данные кусками! Хотелось бы знать какого размера кусок я могу прочитать в оперативку!?
Буфер 4-6 Mb вполне достаточно. Больший буфер прироста в скорости не даст.

Ну или, например, если мы хотим, чтобы наше приложение занимало в оперативке памяти не больше определенной константы!
Это лучше задать на старте основываясь на размере физической памяти (напр 80%) и позволить пользователю менять это значение. И распределять основываясь на этом. Информация, полученная от ОС. будет динамична/неустойчива, напр. в какой-то момент памяти может быть мало (что-то мощное стартовало)  и.т.п.

Записан
alexman
Гость
« Ответ #8 : Апрель 27, 2010, 09:46 »

]Это лучше задать на старте основываясь на размере физической памяти (напр 80%) и позволить пользователю менять это значение.
Спасибо! Это понял!
Записан
BRE
Гость
« Ответ #9 : Апрель 27, 2010, 12:25 »

]Это лучше задать на старте основываясь на размере физической памяти (напр 80%) и позволить пользователю менять это значение.
Спасибо! Это понял!
Да не нужно привязываться к физической памяти. Эта величина тоже ничего не дает.
Предположим, что платформа 32 битная.
На машине установлено 512 Мб оперативной памяти, я очень сильно сомневаюсь, что приложение получит 80% от нее (имеется ввиду физическая память), ОС найдет ей другое применение.
Или на машине установлено 32 Гб оперативки, приложение физически (без дополнительных телодвижений) не сможет адресовать больше 4 Гб (а на самом деле в зависимости от ОС - 2 или 3 Гб).

Короче, не морочь себе пейсы.  Улыбающийся
« Последнее редактирование: Апрель 27, 2010, 12:27 от BRE » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 27, 2010, 15:28 »

Да не нужно привязываться к физической памяти. Эта величина тоже ничего не дает.
Дает. Разумеется, для 32-битного подсекаем размер физической памяти до 2 Gb. А вот если стоит всего 512, то ОС будет выделять, скажем, 1 Gb и больше - но с очень печальными последствиями. В 64-битах ситуация та же но в большем масштабе.

Короче, не морочь себе пейсы.  Улыбающийся
Не морочу ввиду отсутствия таковых  Улыбающийся
Записан
BRE
Гость
« Ответ #11 : Апрель 27, 2010, 15:34 »

Дает. Разумеется, для 32-битного подсекаем размер физической памяти до 2 Gb. А вот если стоит всего 512, то ОС будет выделять, скажем, 1 Gb и больше - но с очень печальными последствиями. В 64-битах ситуация та же но в большем масштабе.
Ну так а что в таком случае дает? Улыбающийся
Если стоит 512 Мб, то 80% от нее ты вряд-ли получишь.
Тогда для чего все это?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Апрель 27, 2010, 15:49 »

Ну так а что в таком случае дает? Улыбающийся
Если стоит 512 Мб, то 80% от нее ты вряд-ли получишь.
Тогда для чего все это?
Можно "получить" (то есть выделить) и 160%. а когда и 300%  Улыбающийся Разумеется я не узнаю "что" я получил, реальная ли это память или страницы на диске. Мне важно знать стОит ли выделять больше памяти или уже пришла пора обработать часть данных, выдать результаты и затем заниматься следующей порцией (пусть с накладными расходами). 
Записан
BRE
Гость
« Ответ #13 : Апрель 27, 2010, 15:51 »

Мне важно знать стОит ли выделять больше памяти или уже пришла пора обработать часть данных
Как ты это узнаешь? Особенно опираясь на размер физической памяти.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Апрель 27, 2010, 16:08 »

Мне важно знать стОит ли выделять больше памяти или уже пришла пора обработать часть данных
Как ты это узнаешь? Особенно опираясь на размер физической памяти.
Просто вычисляем предельное (максимальное) значение один раз на старте. Ведем статистику сколько уже распределено. Сравниваем выделено - предел, напр.
Код:
size_t numLines = (MaxMem() - MemAllocated()) / lineSize;
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 22.