Небезопасный сверхбыстрый буфер памяти между процессами?

Буферы памяти между процессами всегда имеют некоторые накладные расходы, и я понимаю, что они довольно высоки. Но что, если вы реализуете буфер рендеринга между процессами, это не так важно, как другие данные, поэтому есть ли методы, которые мы можем использовать для получения «сырого» доступа к фрагменту памяти из нескольких процессов? , без подстраховки кроме него не сбой? Или современные операционные системы просто не работают с неабстрагированной памятью таким образом, чтобы это стало возможным... в старые времена вы не могли получить указатель на ЛЮБОЕ место в памяти?

Я работаю на C++, но вопрос относится к Win XP/Vista/7, MacOSX 10.5+ (и, что менее важно, к Linux).


person Mr. Boy    schedule 16.03.2011    source источник
comment
вопрос в том, без какой-либо формы синхронизации, как ваш второй процесс узнает, следует ли отображать кадр или нет? Я бы рискнул, что реализация чего-то подобного (скажем, с использованием семафора) не добавит слишком много дополнительных накладных расходов по сравнению с фактическими шагами рендеринга/отображения для данного кадра...   -  person Nim    schedule 16.03.2011
comment
Передача сообщения между процессами очень мала, проблема в том, что я не хочу, чтобы запись/чтение в буфер замедлялись из-за мер безопасности, блокировки и т. д., это может быть 5 МБ данных или более.   -  person Mr. Boy    schedule 16.03.2011


Ответы (1)


Файлы с отображением памяти - это то, что вам нужно.

person demonkoryu    schedule 16.03.2011
comment
Действительно, использовать файл как общий ресурс? Эффективно ли это, если вы выполняете рендеринг со скоростью 60 кадров в секунду, и каждый кадр рендерит сцену в буфер в одном процессе и из буфера на экран в другом? Я не мог получить точного ответа, какая часть «файла» актуальна в файлах с отображением памяти. - person Mr. Boy; 16.03.2011
comment
Файловая часть предназначена для ваших целей просто как способ дать ресурсу уникальное имя, под которым его можно будет использовать совместно. Все, что вы получаете при вызове функции, — это необработанный указатель на память, который другие процессы также могут получить, просто вызвав функцию сопоставления файлов с тем же именем файла. - person demonkoryu; 16.03.2011