![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
chereppiter |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 30 Регистрация: 12.11.2012 Пользователь №: 3595 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Народ, в Qt есть какие-нибудь функции/классы для работы с виртуальной памятью? Что-нибудь наподобие VirtualAlloc в Win32 API. Есть необходимость выделять в программе большие объёмы памяти, теоретически до нескольких гигабайт.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Есть файлы отображаемые в память. Подойдут?
|
|
|
chereppiter |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 30 Регистрация: 12.11.2012 Пользователь №: 3595 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Эммм... Не знаю, подойдут или нет - не доводилось ещё их использовать. На самом деле проблема в следующем: в программе нужно временно хранить большие объёмы данных, причём сами данные постоянно меняются (одни данные устарели, на их место можно записать новые). В принципе, можно было бы воспользоваться QTemporaryFile и хранить данные во временных файлах, но есть опасения, что постоянные операции чтения-записи на жёсткий диск сильно замедлят работу приложения, а оно критично к скорости. Поэтому и хотелось воспользоваться каким-то механизмом типа виртуальной памяти, чтобы основная масса операций всё-таки происходила в оперативной памяти и лишь при необходимости использовался жёсткий диск. А как тут использовать отображаемые в память файлы, мне не совсем понятно. Насколько я понимаю, файл должен уже существовать перед началом его отображения. Ну или его можно сначала создать, но он же должен иметь максимально возможный размер? А хотелось бы, чтобы он увеличивался или уменьшался по мере необходимости.
|
|
|
Iron Bug |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Не знаю, как именно это реализовано в Qt, но под вендой, например, работа с файлами с отображением в память оптимизируется через задание смещения начала и размера отображаемого участка, если требуется читать не весь файл. А временные файлы через API венды вообще создаются в памяти и только при нехватке памяти кэшируются в
своп. Я работала с многогигабайтными файлами изображений через API - вполне сносная скорость была. А самые быстрые кроссплатформенные функции работы с файлами - в СRT: fopen, fread, fwrite, fseek. Они просто раз в десять шустрее всех потоковых C++-ных наворотов. Если нужно много скакать по файлу c чтением и записью, то лучше их заюзать. И установить размер буфера через setvbuf. |
|
|
qt_user |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 52 Регистрация: 11.9.2012 Пользователь №: 3518 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
виртуальная память не хранится в ОЗУ. Виртуальные страницы подружаются при необходимости.
У тебя программа загружается без инициализации этих данных? Если да, то в момент выполнения программы делай new. Испытай кучу. А ваще просто проектирование ПО дало сбой видимо. Несколько Гб в ОЗУ, так никто не делает. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 2.3.2025, 3:32 |