В настоящее время я читаю код PostgreSql. Вот выдержка из диспетчера буфера:
static void WaitIO(volatile BufferDesc *buf);
static bool StartBufferIO(volatile BufferDesc *buf, bool forInput);
static void TerminateBufferIO(volatile BufferDesc *buf, bool clear_dirty,
Я знаю, что ключевое слово volatile обычно используется для драйверов устройств и во встроенных системах. Существует объяснение ключевого слова.
Когда ключевое слово volatile используется в определении типа, оно дает указание компилятору о том, как он должен обрабатывать переменную. Прежде всего, он сообщает компилятору, что значение переменной может измениться в любое время в результате действий, внешних по отношению к программе или текущей строке выполнения. (Источник)
Итак, почему некоторые аргументы функции объявлены как изменчивые? Я не ожидаю, что DMA изменит местоположение указателя. Итак, что здесь происходит?