crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Виртуальная память
chereppiter
  опции профиля:
сообщение 21.11.2012, 14:26
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 12.11.2012
Пользователь №: 3595

Спасибо сказали: 0 раз(а)




Репутация:   0  


Народ, в Qt есть какие-нибудь функции/классы для работы с виртуальной памятью? Что-нибудь наподобие VirtualAlloc в Win32 API. Есть необходимость выделять в программе большие объёмы памяти, теоретически до нескольких гигабайт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.11.2012, 22:18
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Есть файлы отображаемые в память. Подойдут?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
chereppiter
  опции профиля:
сообщение 23.11.2012, 13:05
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 12.11.2012
Пользователь №: 3595

Спасибо сказали: 0 раз(а)




Репутация:   0  


Эммм... Не знаю, подойдут или нет - не доводилось ещё их использовать. На самом деле проблема в следующем: в программе нужно временно хранить большие объёмы данных, причём сами данные постоянно меняются (одни данные устарели, на их место можно записать новые). В принципе, можно было бы воспользоваться QTemporaryFile и хранить данные во временных файлах, но есть опасения, что постоянные операции чтения-записи на жёсткий диск сильно замедлят работу приложения, а оно критично к скорости. Поэтому и хотелось воспользоваться каким-то механизмом типа виртуальной памяти, чтобы основная масса операций всё-таки происходила в оперативной памяти и лишь при необходимости использовался жёсткий диск. А как тут использовать отображаемые в память файлы, мне не совсем понятно. Насколько я понимаю, файл должен уже существовать перед началом его отображения. Ну или его можно сначала создать, но он же должен иметь максимально возможный размер? А хотелось бы, чтобы он увеличивался или уменьшался по мере необходимости.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.11.2012, 15:36
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Не знаю, как именно это реализовано в Qt, но под вендой, например, работа с файлами с отображением в память оптимизируется через задание смещения начала и размера отображаемого участка, если требуется читать не весь файл. А временные файлы через API венды вообще создаются в памяти и только при нехватке памяти кэшируются в
своп. Я работала с многогигабайтными файлами изображений через API - вполне сносная скорость была.

А самые быстрые кроссплатформенные функции работы с файлами - в СRT: fopen, fread, fwrite, fseek. Они просто раз в десять шустрее всех потоковых C++-ных наворотов. Если нужно много скакать по файлу c чтением и записью, то лучше их заюзать. И установить размер буфера через setvbuf.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
qt_user
  опции профиля:
сообщение 23.12.2012, 19:24
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 11.9.2012
Пользователь №: 3518

Спасибо сказали: 0 раз(а)




Репутация:   0  


виртуальная память не хранится в ОЗУ. Виртуальные страницы подружаются при необходимости.
У тебя программа загружается без инициализации этих данных?
Если да, то в момент выполнения программы делай new. Испытай кучу.

А ваще просто проектирование ПО дало сбой видимо. Несколько Гб в ОЗУ, так никто не делает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.12.2024, 14:52