Я создаю утилиту на C++ для работы в Linux, которая может конвертировать видео в проприетарный формат. Видеокадры очень большие (до 16 мегапикселей), и нам нужно иметь возможность напрямую обращаться к точным номерам кадров, поэтому в нашем формате файлов используется libz для сжатия каждого кадра по отдельности и добавления сжатых данных в файл. После того как все кадры будут записаны, журнал, который включает метаданные для каждого кадра (включая их смещения и размеры файлов), записывается в конец файла.mmap() для больших файлов ввода/вывода?
В настоящее время я использую ifstream и поток, чтобы делать файл ввода/вывода, но я стараюсь оптимизировать как можно больше. Я слышал, что mmap() может увеличить производительность во многих случаях, и мне интересно, является ли мой из них одним из них. Наши файлы будут от десятков до сотен гигабайт, и хотя запись всегда будет выполняться последовательно, чтение в режиме произвольного доступа должно выполняться в постоянное время. Любые мысли о том, следует ли мне расследовать это дальше, и если да, то есть ли у кого-нибудь какие-то подсказки о том, что нужно искать?
Спасибо!
Насколько случайны считывания? Является ли диапазон неограниченным или ограниченным? – MSN
Чтения на самом деле не слишком случайны, так как обычное использование приведет к тому, что пользователь ищет конкретный кадр, а затем играет довольно много в последовательности. Извините - не уверен, что вы имеете в виду о диапазоне? – rcv
На боковой ноте - это не похоже на хороший способ хранения видео - даже если вам нужно качество без потерь. – slacker