mmap
имеет преимущество, когда у вас есть случайный доступ к большим файлам. Другим преимуществом является то, что вы обращаетесь к нему с операциями памяти (memcpy, арифметикой указателей), не беспокоясь о буферизации. Обычный ввод-вывод иногда может быть довольно сложным при использовании буферов, когда у вас есть структуры, большие, чем ваш буфер. Код для обработки, который часто трудно получить, mmap обычно проще. Это говорит о том, что при работе с mmap
есть определенные ловушки. Как уже упоминалось, mmap
достаточно дорогостоящим, поэтому стоит использовать только для заданного размера (от машины к машине).
Для чистого последовательного доступа к файлу это также не всегда лучшее решение, хотя соответствующий вызов madvise
может уменьшить проблему.
Вы должны быть осторожны с ограничения на выравнивание вашей архитектуры (SPARC, itanium), с IO для чтения / записи, буферы часто правильно выравниваются и не ловутся при разыменовании литого указателя.
Вы также должны быть осторожны, чтобы не получить доступ вне карты. Это легко осуществить, если вы используете строковые функции на своей карте, и ваш файл не содержит \ 0 в конце. Он будет работать большую часть времени, когда размер вашего файла не будет кратным размеру страницы, так как последняя страница заполнена 0 (отображаемая область всегда имеет размер кратного размера вашей страницы).
Настройка, которую вы описали, звучит правильно для меня. Медиа в public/
обслуживаются как
http://localhost:3000/myphoto.jpg
В примере todos используются изображения из общедоступного каталога. Просто вернитесь из любого проекта, в котором вы находитесь, и запустите: meteor create --example todos
, затем перейдите в todos / и запустите meteor
. Затем откройте:
http://localhost:3000/destroy.png
Изображение, которое вы увидите, живет в public/
.