Форум программистов, компьютерный форум CyberForum.ru

размещение файлов в оперативной памяти - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.67
titan_t1000
0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 5
24.09.2010, 01:12     размещение файлов в оперативной памяти #1
Я бы хотел узнать, есть ли способ разместить в оперативной памяти какие нибудь файлы. Например текстовый и какой нибудь исполнительный exe файл, который делает с текстовым определенные действия. Затем в этой же оперативной памяти выполнить программу на этом файле. То есть весь смысл в том, чтобы все это дело работало не на жестком диске, а в оперативной памяти.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2010, 01:12     размещение файлов в оперативной памяти
Посмотрите здесь:

C++ Размещение объекта в памяти
C++ Изменение битов в оперативной памяти
C++ Размещение map'а в памяти
C++ Размещение переменных в памяти
C++ Размещение объектов в заданных блоках памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.09.2010, 02:03     размещение файлов в оперативной памяти #2
Программа и так работает из оперативной памяти. Когда вы запускаете исполняемый файл, весь машинный код загружается в оперативную память и выполняется уже из неё. Когда вы читаете файл, скажем, в массив, вы его тоже помещаете в оперативную память, и все действия программа совершает над загруженной в память копией исходного файла.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 02:28     размещение файлов в оперативной памяти #3
silent_1991, Вы не правы. Если говорить о Windows, то исполняемый файл всего лишь проецируется в оперативную память, а не загружается.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.09.2010, 09:51     размещение файлов в оперативной памяти #4
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
проецируется ... а не загружается.
Эм... а по-конкретней можно? Я тоже всю жизнь думал, что исполняемый файл загружается в ОЗУ
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.09.2010, 10:30     размещение файлов в оперативной памяти #5
Цитата Сообщение от titan_t1000 Посмотреть сообщение
Я бы хотел узнать, есть ли способ разместить в оперативной памяти какие нибудь файлы. Например текстовый и какой нибудь исполнительный exe файл, который делает с текстовым определенные действия. Затем в этой же оперативной памяти выполнить программу на этом файле. То есть весь смысл в том, чтобы все это дело работало не на жестком диске, а в оперативной памяти.
Решения два: админское - зафигачить туда виртуальный диск, програмерское - исспользовать системные функции отображения файлов в память.

Добавлено через 2 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
Когда вы читаете файл, скажем, в массив, вы его тоже помещаете в оперативную память, и все действия программа совершает над загруженной в память копией исходного файла.
Зависит от программы. Может она не с массивом работает, а только с его элементами? А так, можно не трогая программу, заставить её работать только с памятью без диска.

Добавлено через 2 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
Эм... а по-конкретней можно? Я тоже всю жизнь думал, что исполняемый файл загружается в ОЗУ
загрузка - это загрузка целиком. А отображение - это кусками, причём, смещения байтов в этих кусках не зависят от того, какие именно куски выбраны для загрузки, а определяются только положением этих байт в самом файле. Представь себе, что у тебя в файле массив, а ты хочешь его отсортировать, в памяти для его хранения выделяешь место только для двух элементов, а не для всего массива, но адресуешь элементы смещениями от начала файла. Вот это близко к отображению, а загрузка всего массива в буфер равного размера для сортировки в памяти с последующим сохранением буфера назад в файл - это загрузка. При достаточном размере памяти отображение маленького файла превращается в загрузку. Но непосредственно с диска код, конечно, не работает.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
24.09.2010, 11:13     размещение файлов в оперативной памяти #6
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
silent_1991, Вы не правы. Если говорить о Windows, то исполняемый файл всего лишь проецируется в оперативную память, а не загружается.
Это не особенно и важно. Важно лишь то, что те коды, которые в настоящий момент исполняются и те данные, которые в настоящий момент используются, всегда находятся в памяти, а не на диске
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.09.2010, 11:18     размещение файлов в оперативной памяти #7
ТС вроде целиком хочет. А по твоей логике все данные находятся в регистрах, а весь код - в конвейере.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 13:09     размещение файлов в оперативной памяти #8
Цитата Сообщение от Evg Посмотреть сообщение
Это не особенно и важно.
Как раз таки ТС хочет чтобы весь файл был в оперативной памяти, в случае проецирования это не так.
Цитата Сообщение от Kastaneda Посмотреть сообщение
Эм... а по-конкретней можно? Я тоже всю жизнь думал, что исполняемый файл загружается в ОЗУ
Лучше всего об этом прочитать в книге Дж. Рихтера "Windows для профессионалов".
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
24.09.2010, 13:12     размещение файлов в оперативной памяти #9
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как раз таки ТС хочет чтобы весь файл был в оперативной памяти, в случае проецирования это не так.
Чего хочет ТС - не особенно понятно. Может явится и внятно пояснит

Цитата Сообщение от Kastaneda Посмотреть сообщение
Эм... а по-конкретней можно? Я тоже всю жизнь думал, что исполняемый файл загружается в ОЗУ
По английски этот термин называется map (мапировать, отображать). В момент запуска процесса ядро отображает исполняемый файл на память. Для самого процесса это означает то, что процесс думает, будто бы он весь в памяти лежит. Реально в момент запуска в память кладётся только одна страница памяти (там, где находится стартовая операция процесса). Далее если в процессе исполнения мы попали на адрес (по коду или под данным), который на текущий момент в память не отображён, то возникает прерывание и ОС подгружает эту страницу памяти из файла, после чегопродолжает исполнение процесса. Т.е. для процесса весь этот механизм прозрачен. Он знать не знает о том, что возникали какие-то прерывания и подкачки страниц с диска в память. Аналогичным образом долго неиспользуемые страницы в памяти выгружаются в swap-раздел диска, а когда они оказываются нужными, то подкачиваются.

Это некое условное объяснение на пальцах. Всё зависит от настроек ОС. Оно может целиком загрузить процесс сразу, а может и по кускам. Или всё это от количества оперативки зависит: если свободной памяти много, то по возможности грузится целиком, если мало, то по кускам. Реально одновременно исполняемые на процессоре задачи могут суммарно потреблять больше памяти, чем установлено на машине. Всё это разруливается swap-разделом диска, куда отгружаются неиспользуемые на текущий момент страницы памяти.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.09.2010, 13:17     размещение файлов в оперативной памяти #10
Цитата Сообщение от Evg Посмотреть сообщение
Это некое условное объяснение на пальцах. Всё зависит от настроек ОС. Оно может целиком загрузить процесс сразу, а может и по кускам. Или всё это от количества оперативки зависит: если свободной памяти много, то по возможности грузится целиком, если мало, то по кускам. Реально одновременно исполняемые на процессоре задачи могут суммарно потреблять больше памяти, чем установлено на машине. Всё это разруливается swap-разделом диска, куда отгружаются неиспользуемые на текущий момент страницы памяти.
Свапятся только данные, а неиспользуемые страницы кода просто выбрасываются: они ведь не меняются и повторная загрузка из исполняемого файла даст правильные страницы, но освобождение памяти без сохранения освобождаемых страниц происходит быстрее, чем при свопинге.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
24.09.2010, 13:24     размещение файлов в оперативной памяти #11
Цитата Сообщение от taras atavin Посмотреть сообщение
Свапятся только данные, а неиспользуемые страницы кода просто выбрасываются: они ведь не меняются и повторная загрузка из исполняемого файла даст правильные страницы, но освобождение памяти без сохранения освобождаемых страниц происходит быстрее, чем при свопинге.
Справделивое замечание. В swap перемещаются только те страницы память, у которых есть доступ по записи. Read-only страницы (страницы с исполняемым кодом и константными данными) в swap не переосятся и при необходимости подкачиваются напрямую из бинарного файла программы

Если в момент исполнения программы попробовать удалить бинарник, то винда попросту не даст это сделать. Unix-подобные системы сделают вид, что файл удалён, но физически и логически он останется на диске (именно для того, чтобы нормально можно было его подкачивать в память), но пользователь этот файл видеть не будет. И только после завершения программы ОС удалит файл
titan_t1000
0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 5
24.09.2010, 13:24  [ТС]     размещение файлов в оперативной памяти #12
Да, я хочу именно расположить файлы в ОП и работать там с ними так же, как будто они на жестком диске.

Цитата Сообщение от taras atavin Посмотреть сообщение
Решения два: админское - зафигачить туда виртуальный диск, програмерское - исспользовать системные функции отображения файлов в память.
Можно поподробнее про оба решения?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
24.09.2010, 13:26     размещение файлов в оперативной памяти #13
Цитата Сообщение от titan_t1000 Посмотреть сообщение
и работать там с ними так же
Что значит так же? Поясни конкретно. И главное, поясни, чем тебя не устраивает, когда фай лежит на диске, потому что, подозреваю, только после этогопояснения станет понятно, чего же ты хочешь
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
24.09.2010, 13:29     размещение файлов в оперативной памяти #14
То есть синтаксис тебе нужен файловый, а размещение оперативное? Тогда виртуальный диск. Поставь себе его драйвер, настрой и будет у тебя в оперативке ещё один диск. Но файлы на нём перезагрузку не переживут. Поэтому при любой перезагрузке (горячей или холодной) сначала копируй всё, что на нём валяется, куда нибудь ещё.
titan_t1000
0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 5
24.09.2010, 13:44  [ТС]     размещение файлов в оперативной памяти #15
Цитата Сообщение от Evg Посмотреть сообщение
Что значит так же? Поясни конкретно. И главное, поясни, чем тебя не устраивает, когда фай лежит на диске, потому что, подозреваю, только после этогопояснения станет понятно, чего же ты хочешь
В идеале я хочу создать программу№1, которая область оперативной памяти превращает в крошечный локальный диск, но подозреваю что это ну ооочень большой геморой. По идее, все что мне нужно - это чтобы программа№2 и файл для нее работали не с жесткого диска, а из ОП, то есть достаточно просто разместить программу№2 и файл для нее в ОП и запустить эту программу№2 там. Так что если можно обойтись без виртуальных дисков в ОП было бы здорово. А нужны мне все эти извращения изза дикой прибавки в производительности и простого интереса можно ли такое вообще сделать.

Добавлено через 3 минуты
taras atavin, об этом можно где нибудь почитать?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
24.09.2010, 16:35     размещение файлов в оперативной памяти #16
titan_t1000, если я правильно понимаю тебя, то ты хочешь приложить невероятные усилия только для того, чтобы сделать то, что и так уже сделано. Программы N1 и N2 они же не из воздуха берутся, а изначлаьно лежат на диске. Так какая тебе в пень разница, ты их сам будешь помещать в память или вместо тебя это сделает ОС? Скорости это не прибавит

Может ты что-то неправильно понимаешь, но программы в момент запуска ВСЕГДА находятся в памяти, хочешь ты этого или нет. А потому у тебя попросту нет другого способа, а следовательно ты пытаешься изобрести велосипед. По сути дела ты хочешь сделать то, что делает загрузчик операционной системы или динамический загрузчик (ld.so).
titan_t1000
0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 5
24.09.2010, 17:42  [ТС]     размещение файлов в оперативной памяти #17
Цитата Сообщение от Evg Посмотреть сообщение
titan_t1000, если я правильно понимаю тебя, то ты хочешь приложить невероятные усилия только для того, чтобы сделать то, что и так уже сделано. Программы N1 и N2 они же не из воздуха берутся, а изначлаьно лежат на диске. Так какая тебе в пень разница, ты их сам будешь помещать в память или вместо тебя это сделает ОС? Скорости это не прибавит

Может ты что-то неправильно понимаешь, но программы в момент запуска ВСЕГДА находятся в памяти, хочешь ты этого или нет. А потому у тебя попросту нет другого способа, а следовательно ты пытаешься изобрести велосипед. По сути дела ты хочешь сделать то, что делает загрузчик операционной системы или динамический загрузчик (ld.so).
Ну допустим программы в памяти находятся, а что насчет файла?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.09.2010, 20:49     размещение файлов в оперативной памяти #18
titan_t1000,
А что на счёт файла? Если файл большой, он попросту не поместится в памяти целиком и его всё равно придётся подгружать с жёсткого диска, а если маленький, то всё это, ИМХО, особой прибавки в производительности не даст.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 22:20     размещение файлов в оперативной памяти #19
Цитата Сообщение от titan_t1000 Посмотреть сообщение
Ну допустим программы в памяти находятся, а что насчет файла?
Если мы говорим не о последовательном доступе, то быстрее всего работать с файлами проецируя их в память. См. тут: File Mapping.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2010, 12:34     размещение файлов в оперативной памяти
Еще ссылки по теме:

Размещение класса в динамической памяти C++
C++ Размещение элементов в памяти
C++ Тестирование RAM (оперативной памяти)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
titan_t1000
0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 5
25.09.2010, 12:34  [ТС]     размещение файлов в оперативной памяти #20
silent_1991,
Я бы никогда не стал будучи в сознании грузить в ОП огромные файлы.
Yandex
Объявления
25.09.2010, 12:34     размещение файлов в оперативной памяти
Ответ Создать тему
Опции темы

Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru