Я пытаюсь внедрить круговой буфер в C и столкнулся с примером this в Википедии (удален в июле 2014 года). Похоже, что это обеспечит действительно приятный интерфейс для тех, кто читает из буфера, поскольку чтение, которое обтекает от конца до начала буфера, обрабатывается автоматически. Таким образом, все чтения являются смежными.Насколько хорош круговой буфер с памятью в Википедии?
Однако я немного не уверен в том, что буду использовать его сразу, поскольку у меня нет большого опыта в сопоставлении памяти или виртуальной памяти, и я не уверен, что полностью понимаю, что он делает.
Я понимаю, что я понимаю, что он дважды отображает файл общей памяти размером в буфер в память. Затем, всякий раз, когда данные записываются в буфер, он появляется в памяти в двух местах одновременно. Это позволяет всем чтениям быть смежными.
Что было бы действительно здорово, если бы кто-то, у кого больше опыта сопоставления памяти POSIX, мог бы быстро взглянуть на код и сказать мне, действительно ли используемый механизм является эффективным. Правильно ли я думаю, например, что файл в/dev/shm, используемый для общей памяти, всегда остается в ОЗУ или может быть записано на жесткий диск (удар производительности) в какой-то момент? Есть ли какие-то ошибки, о которых я должен знать?
Как бы то ни было, я, вероятно, собираюсь использовать более простой метод для моего текущего проекта, но было бы хорошо понять это, чтобы оно было в моем ящике инструментов для будущего.
Заранее благодарим за ваше время.
Это похоже на _shared memory_, то есть для межпроцессного взаимодействия. Это то, что вы хотите? Если я правильно помню, что разделяемая память не поддерживается диском. (Но это с давних времен). – 2010-05-27 17:23:02
@Moron, есть 'unlink', который скрывает имя файла под«/dev/shm », поэтому IPC отсутствует. – ony
@ony: Я не понимаю. – 2010-05-27 18:07:59