2015-11-04 4 views
0

Я использую boost::iostreams::mapped_file_source для создания файлов с отображением памяти. В дополнение к 1024. К моему удивлению, когда я создал около 1024 файлов с отображением памяти, моя программа выдает исключение, в котором открыто слишком много файлов. После некоторых исследований я обнаружил, что Ubuntu использует максимальный размер файла для процессов 1024 (найденный от ulimit -n). К сожалению, мне нужно, чтобы все файлы были открыты одновременно. Кто-нибудь знает об этом? Возможно ли, чтобы файлы не учитывались до предела? Я думал о попытке объединить их в один файл; однако я хотел бы избежать этого, если это возможно из-за производительности. И я также хотел бы не изменять операционную систему, изменяя значение. Любые точки в правильном направлении очень ценятся!Файлы с памятью и максимальный размер файла

+1

Возможно, вы захотите проверить этот вопрос http://unix.stackexchange.com/questions/75996/modify-ulimit-open-files-of-a-specific-process – Oleg

ответ

3

Зачем вам нужно открыть много отображаемых файлов? Это кажется очень неэффективным. Может быть, вы можете сопоставить (регионы) один большой файл?

Q. Я думал о попытке объединить их в один файл; однако я хотел бы избежать этого, если это возможно из-за производительности

Это ... ерунда. Производительность может в основном только увеличиваться.

Особо следует иметь в виду, чтобы выровнять различные области внутри вашего «большого сопоставленного файла» до нескольких страниц вашей памяти или размера блока. 4k должен быть хорошим стартером для этого грубого выравнивания.

+0

Какая причина, по вашему мнению, это увеличит производительность? – joshu

+1

С одной стороны, вы уменьшите накладные расходы (очевидно, потому что у вас уже закончился определенный ресурс в вашей конфигурации ...). С другой стороны, вы, очевидно, удалите необходимость постоянно открывать/открывать сопоставления (вы можете просто оставить его открытым). Распространенное заблуждение состоит в том, что «это займет слишком много ОЗУ», но виртуальная память просто не работает. – sehe

+1

(На этой последней теме: http://stackoverflow.com/questions/24249763/release-memory-mapped-memory/24253385, также возможно интересно: http://stackoverflow.com/questions/24352943/write-only-memory -отображения-в-импульс/24354199 s = 55 |? 0,0000 # 24354199) – sehe