Я читал одну из реализаций файлов с отображением памяти в golang, https://github.com/edsrzf/mmap-go/. Сначала он описывает несколько режимов доступа:
// RDONLY maps the memory read-only.
// Attempts to write to the MMap object will result in undefined behavior.
RDONLY = 0
// RDWR maps the memory as read-write. Writes to the MMap object will update the
// underlying file.
RDWR = 1 << iota
// COPY maps the memory as copy-on-write. Writes to the MMap object will affect
// memory, but the underlying file will remain unchanged.
COPY
Но в тестовом файле gommap я вижу это:
func TestReadWrite(t *testing.T) {
mmap, err := Map(f, RDWR, 0)
... omitted for brevity...
mmap[9] = 'X'
mmap.Flush()
Так зачем ему вызывать Flush, чтобы убедиться, что содержимое записано в файл, если режим доступа RDWR?
Или ОС управляет этим, поэтому пишет только тогда, когда считает нужным?
Если последний вариант, не могли бы вы объяснить его немного подробнее - я читал, что когда ОС не хватает памяти, она записывает в файл и освобождает память. Правильно ли это и относится ли это только к RDWR или только к COPY?
Спасибо