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

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

Войти
Регистрация
Восстановить пароль
 
МихаилХ
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
#1

Могут ли два приложения пользоваться одной и той же выделенной памятью? - C++

18.03.2014, 09:34. Просмотров 330. Ответов 7
Метки нет (Все метки)

День добрый! С помощью FileMapping, в ActiveX компоненте, создана область в памяти куда копируются объекты (текстуры и файлы STL). Эти объекты содержат указатели на элементы созданные в выделяемой памяти. Объекты копируются туда чтобы несколько программ обращались к одной области памяти для загрузки текстур и файлов STL что значительно сокращает объем занимаемой программой памяти. Так вот проблема состоит в том что первая запущенная программа запускается нормально, а следующие программы нет из-за того что объекты в выделенной памяти просто исчезают. Они то ли затираются либо просто недоступны другой программы. Объекты копируются в область FileMappinga с помощью memcpy. Смещения между объектами посчитаны (вроде как) правильно. Так может ли что бы две программы обращаться к одной и той же выделанной памяти??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 09:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Могут ли два приложения пользоваться одной и той же выделенной памятью? (C++):

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? - C++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

Другие не могут пользоваться моей программой - C++
Создал консоль приложение. Скомпилировал. Поделился своим приложением, то есть ехе. файлом. Но у других почему-то выдает ошибку. В чем...

два студента на практике в одной и той же фирме - Теория вероятностей
Привет! Ребята, помогите! Два дня бьюсь с задачей, не могу решить. "Группе студентов для прохождения производственной практики ...

Ноутбук не заряжается два раза от одной и той же розетки - Ремонт ноутбуков
Даже не знаю, что в поиске вбивать, чтобы найти похожие проблемы ) Ноутбук Asus N76V не заряжается от одной и той же розетки больше...

Два домена для одной и той же копии сайта - PHP
Здравствуйте, у меня есть два домена, находящихся на одном хостинге, мне надо сделать что бы по двум доменам была одна и таже копия сайта....

Как создать и загрузить несколько размеров одной и той же иконки приложения? - Delphi
Здравствуйте:) Как я понял, для корректного отображения иконки при всех размерах значков, необходимо создать набор иконок из всех...

7
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,203
18.03.2014, 09:59 #2
Цитата Сообщение от МихаилХ Посмотреть сообщение
Могут ли два приложения пользоваться одной и той же выделенной памятью?
могут
но не напрямую
для винды это реализуется или через Dll или через "Файлы, проецируемые в память"
http://cppclub.newmail.ru/articles/win32_35.html
http://ru.wikipedia.org/wiki/Отображение_файла_в_память
0
МихаилХ
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
18.03.2014, 10:22  [ТС] #3
Про проецируемые в память файлы я знаю, ими то я и пользуюсь. Суть вопроса то не в этом, я наверное криво написал. Повторю по подробней у меня в память FileMapping копируются объекты содержащие в себе указатели на элементы в динамической памяти. Первая запущенная программа содержимое этих областей видит, то есть там содержаться нужные данные и в целом все хорошо. А вот вторая программа по тому же самому указателю данных не видит то есть там пусто (мусор). Соответственно и вопрос в том что или делать так, как делаю я, не правильно, или у меня все таки где то эта память затирается, или, вообще, два процесса не могут обращать к одной и той же динамической памяти.

Добавлено через 6 минут
Если требуется код программы, я его приведу.
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,203
18.03.2014, 11:30 #4
Цитата Сообщение от МихаилХ Посмотреть сообщение
Суть вопроса то не в этом, я наверное криво написал. Повторю по подробней у меня в память FileMapping копируются объекты содержащие в себе указатели на элементы в динамической памяти. Первая запущенная программа содержимое этих областей видит, то есть там содержаться нужные данные и в целом все хорошо. А вот вторая программа по тому же самому указателю данных не видит
и не будет видеть
поскольку каждому процессу Виндос выделяет свою память
грубо говоря это разные компьютеры
представь что два компьютера связаны в сеть и один передает другому указатели на свою память

выход в проецируемый файл заносить не указатели а сами объекты

Добавлено через 2 минуты
могу по другому объяснить
представь что у тебя не проецируемый файл а обыкновенный
записал указатели в файл, вышел, снова вошел, и считал файл
куда будут указывать эти указатели?
1
МихаилХ
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
18.03.2014, 11:34  [ТС] #5
Спасибо! Теперь понятно! =)
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,203
18.03.2014, 11:36 #6
теоретически один процесс может видеть память другого
для этого нужно приатачится к процессу
но путь этот скользкий, много тонкостей
и нужно хорошее знание архитектуры системы, шаг влево- вправо и процесс рухнул
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
18.03.2014, 14:08 #7
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Добавлено через 2 часа 6 минут
ValeryS, Не пугайте так людей . Не всё там так сложно
1
МихаилХ
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
18.03.2014, 14:10  [ТС] #8
Спасибо! На самом деле такая работа с память как хождение по тонкому льду =)
0
18.03.2014, 14:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 14:10
Привет! Вот еще темы с ответами:

Проверить, расположены ли два самых больших числа матрицы А в одной и той же строке - C (СИ)
Дана матрица А, состоящая из М строк и N столбцов. Элементы матрицы А являются различными натуральными числами. Если два самых больших...

Запись на лист Excel одной и той же опции ListBox два раза подряд - VBA
Всем доброе время суток ! Опции списка элемента управления ListBox извлекаются из диапазона ячеек, определяемого свойством...

Если два самых больших числа матрицы А расположены в одной и той же строке, то вывести на экран ее номер - C (СИ)
На языке программирования C разработать и реализовать программу: Дана матрица А, состоящая из М строк и N столбцов. Элементы матрицы А...

Работа с памятью, выделенной malloc - C (СИ)
Доброго времени суток! Есть следующая проблема: Выделяем кусок памяти из кучи: void *alloc(size_t size_of_elem, size_t...


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

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

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