Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.67
titan_t1000
0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 5
#1

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

24.09.2010, 01:12. Просмотров 5989. Ответов 20
Метки нет (Все метки)

Я бы хотел узнать, есть ли способ разместить в оперативной памяти какие нибудь файлы. Например текстовый и какой нибудь исполнительный exe файл, который делает с текстовым определенные действия. Затем в этой же оперативной памяти выполнить программу на этом файле. То есть весь смысл в том, чтобы все это дело работало не на жестком диске, а в оперативной памяти.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2010, 01:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос размещение файлов в оперативной памяти (C++):

Размещение в памяти данных - C++
Подскажите отличия,если я читаю данные(вещественные числа) с бинарного файла поэлементно и к примеру если я читаю те же самые данные из...

Размещение элементов в памяти - C++
Добрый день! Подскажите. может ли контейнер STL vector хранить значения типа char (wchar_t)? Если нет, то подскажите, как создать некую...

Размещение функций в памяти - C++
Помогите бедному-зеленому кое-что устаканить в своей голове! Давно тревожит один вопрос: "как расположены функции в памяти?"....

Размещение объекта в памяти - C++
Возможно ли размещение объекта в заранее выделенной памяти, например в массиве? Тоесть не просто скопировать, а так чтобы создание...

Размещение переменных в памяти - C++
пользуюсь Dev-C++, стало интересно, как компиляторы размещают даныые: последовательно, или как попало? предположим есть объявление int i;...

Размещение map'а в памяти - C++
Элементы вектора гарантировано размещаются в памяти рядом, в случае списка элементы лежат где попало, но для этого есть прямые и обратные...

20
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
24.09.2010, 02:03 #2
Программа и так работает из оперативной памяти. Когда вы запускаете исполняемый файл, весь машинный код загружается в оперативную память и выполняется уже из неё. Когда вы читаете файл, скажем, в массив, вы его тоже помещаете в оперативную память, и все действия программа совершает над загруженной в память копией исходного файла.
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 02:28 #3
silent_1991, Вы не правы. Если говорить о Windows, то исполняемый файл всего лишь проецируется в оперативную память, а не загружается.
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,385
Записей в блоге: 2
Завершенные тесты: 1
24.09.2010, 09:51 #4
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
проецируется ... а не загружается.
Эм... а по-конкретней можно? Я тоже всю жизнь думал, что исполняемый файл загружается в ОЗУ
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
24.09.2010, 10:30 #5
Цитата Сообщение от titan_t1000 Посмотреть сообщение
Я бы хотел узнать, есть ли способ разместить в оперативной памяти какие нибудь файлы. Например текстовый и какой нибудь исполнительный exe файл, который делает с текстовым определенные действия. Затем в этой же оперативной памяти выполнить программу на этом файле. То есть весь смысл в том, чтобы все это дело работало не на жестком диске, а в оперативной памяти.
Решения два: админское - зафигачить туда виртуальный диск, програмерское - исспользовать системные функции отображения файлов в память.

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

Добавлено через 2 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
Эм... а по-конкретней можно? Я тоже всю жизнь думал, что исполняемый файл загружается в ОЗУ
загрузка - это загрузка целиком. А отображение - это кусками, причём, смещения байтов в этих кусках не зависят от того, какие именно куски выбраны для загрузки, а определяются только положением этих байт в самом файле. Представь себе, что у тебя в файле массив, а ты хочешь его отсортировать, в памяти для его хранения выделяешь место только для двух элементов, а не для всего массива, но адресуешь элементы смещениями от начала файла. Вот это близко к отображению, а загрузка всего массива в буфер равного размера для сортировки в памяти с последующим сохранением буфера назад в файл - это загрузка. При достаточном размере памяти отображение маленького файла превращается в загрузку. Но непосредственно с диска код, конечно, не работает.
0
Evg
Эксперт CАвтор FAQ
18370 / 6417 / 441
Регистрация: 30.03.2009
Сообщений: 17,803
Записей в блоге: 28
24.09.2010, 11:13 #6
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
silent_1991, Вы не правы. Если говорить о Windows, то исполняемый файл всего лишь проецируется в оперативную память, а не загружается.
Это не особенно и важно. Важно лишь то, что те коды, которые в настоящий момент исполняются и те данные, которые в настоящий момент используются, всегда находятся в памяти, а не на диске
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
24.09.2010, 11:18 #7
ТС вроде целиком хочет. А по твоей логике все данные находятся в регистрах, а весь код - в конвейере.
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 13:09 #8
Цитата Сообщение от Evg Посмотреть сообщение
Это не особенно и важно.
Как раз таки ТС хочет чтобы весь файл был в оперативной памяти, в случае проецирования это не так.
Цитата Сообщение от Kastaneda Посмотреть сообщение
Эм... а по-конкретней можно? Я тоже всю жизнь думал, что исполняемый файл загружается в ОЗУ
Лучше всего об этом прочитать в книге Дж. Рихтера "Windows для профессионалов".
0
Evg
Эксперт CАвтор FAQ
18370 / 6417 / 441
Регистрация: 30.03.2009
Сообщений: 17,803
Записей в блоге: 28
24.09.2010, 13:12 #9
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как раз таки ТС хочет чтобы весь файл был в оперативной памяти, в случае проецирования это не так.
Чего хочет ТС - не особенно понятно. Может явится и внятно пояснит

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

Это некое условное объяснение на пальцах. Всё зависит от настроек ОС. Оно может целиком загрузить процесс сразу, а может и по кускам. Или всё это от количества оперативки зависит: если свободной памяти много, то по возможности грузится целиком, если мало, то по кускам. Реально одновременно исполняемые на процессоре задачи могут суммарно потреблять больше памяти, чем установлено на машине. Всё это разруливается swap-разделом диска, куда отгружаются неиспользуемые на текущий момент страницы памяти.
1
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
24.09.2010, 13:17 #10
Цитата Сообщение от Evg Посмотреть сообщение
Это некое условное объяснение на пальцах. Всё зависит от настроек ОС. Оно может целиком загрузить процесс сразу, а может и по кускам. Или всё это от количества оперативки зависит: если свободной памяти много, то по возможности грузится целиком, если мало, то по кускам. Реально одновременно исполняемые на процессоре задачи могут суммарно потреблять больше памяти, чем установлено на машине. Всё это разруливается swap-разделом диска, куда отгружаются неиспользуемые на текущий момент страницы памяти.
Свапятся только данные, а неиспользуемые страницы кода просто выбрасываются: они ведь не меняются и повторная загрузка из исполняемого файла даст правильные страницы, но освобождение памяти без сохранения освобождаемых страниц происходит быстрее, чем при свопинге.
0
Evg
Эксперт CАвтор FAQ
18370 / 6417 / 441
Регистрация: 30.03.2009
Сообщений: 17,803
Записей в блоге: 28
24.09.2010, 13:24 #11
Цитата Сообщение от taras atavin Посмотреть сообщение
Свапятся только данные, а неиспользуемые страницы кода просто выбрасываются: они ведь не меняются и повторная загрузка из исполняемого файла даст правильные страницы, но освобождение памяти без сохранения освобождаемых страниц происходит быстрее, чем при свопинге.
Справделивое замечание. В swap перемещаются только те страницы память, у которых есть доступ по записи. Read-only страницы (страницы с исполняемым кодом и константными данными) в swap не переосятся и при необходимости подкачиваются напрямую из бинарного файла программы

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

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

Добавлено через 3 минуты
taras atavin, об этом можно где нибудь почитать?
0
24.09.2010, 13:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2010, 13:44
Привет! Вот еще темы с ответами:

Размещение класса в динамической памяти - C++
Добрый день! Интересует такой вопрос, который я никак не пойму: Есть класс class Container, который создается в динамической памяти. c...

Размещение объектов в заданных блоках памяти - C++
Здорова! Есть от код: //razmewenie ob6ektov v zadanux blokax pam9ti #include <iostream> using std::cout; using std::endl; ...

Затраты оперативной памяти - C++
Как узнать количество оперативной памяти, которую использует программа написанная на c++?

Динамическое размещение объекта в определённом месте памяти с последующим её освобождением - C++
Доброго времени суток. В C++ имеется возможность размещать объект по чётко определённому, указанному разработчиком, адресу в памяти. В...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.