Какой максимальный размер блока может быть записан в память процесса? - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно прочитать большой файл, но по параметрам программы пользователь также предоставляет размер блока. Каждый блок должен быть прочитан в память, чтобы получить ха sh блока. Как мне сказать, что это максимальный размер блока, который я могу прочитать в памяти процесса?

Скажем, я использую mapped_region из Boost. Существует параметр size, который является размером региона. Поэтому я хотел бы знать максимальный размер, который я могу передать в конструктор mapped_region.

1 Ответ

0 голосов
/ 07 февраля 2020

Минимальный предел реализации для максимального размера объекта, указанного в стандарте C ++, составляет 262 144 байта. Реализация может поддерживать большие объекты, и многие это делают.

Другим ограничением является размер адресного пространства. Например, в 32-разрядном адресном пространстве может быть адресовано не более 2 32 байтов памяти. Кроме того, часть этого адресного пространства (обычно половина или четверть) будет зарезервирована для ядра операционной системы.

Кроме того, потенциальным ограничением является объем доступной физической памяти в системе (включая подкачку) - если операционная система не перезагружает память и память объекта никогда не записывается.

Кроме того, некоторые операционные системы могут ограничивать общий объем памяти, который может выделить процесс, например RLIMIT_DATA на POSIX.

...