Я пытаюсь реализовать кольцевой буфер в C, и наткнулся на этот пример в Википедии (удален в июле 2014 г.). Похоже, что он предоставит действительно хороший интерфейс для любого, кто читает данные из буфера, поскольку операции чтения, которые переносятся с конца на начало буфера, обрабатываются автоматически. Таким образом, все чтения являются смежными.
Тем не менее, я немного не уверен в его использовании сразу, поскольку у меня нет особого опыта в отображении памяти или виртуальной памяти, и я не уверен, что полностью понимаю, что он делает.
Я думаю, что понимаю, что он отображает файл общей памяти размером с буфер в память в два раза. Затем, когда данные записываются в буфер, они появляются в памяти сразу в двух местах. Это позволяет всем чтениям быть смежными.
Что было бы действительно здорово, если бы кто-то с большим опытом работы с отображением памяти POSIX мог бы быстро взглянуть на код и сказать мне, действительно ли используемый механизм действительно настолько эффективен. Правильно ли я считаю, например, что файл в / dev / shm, используемый для общей памяти, всегда остается в ОЗУ или в какой-то момент он может быть записан на жесткий диск (снижение производительности)? Есть ли какие-то ошибки, о которых я должен знать?
В нынешнем виде я, вероятно, собираюсь использовать более простой метод для моего текущего проекта, но было бы хорошо понять это, чтобы иметь его в своем наборе инструментов на будущее.
Заранее спасибо за ваше время.