Существует несколько решений, но, следуя книге, вы можете использовать модуль IO::AIO
, который имеет функцию IO::AIO::mmap
.По сути, вы бы сделали что-то вроде этого (не проверено):
use IO::AIO
IO::AIO::mmap
my $buffer, BUFFER_SIZE, IO::AIO::PROT_READ | IO::AIO::PROT_WRITE,
IO::AIO::MAP_PRIVATE | IO::AIO::MAP_ANONYMOUS, undef
or die "mmap failure: $!";
$buffer
будет автоматически отображаться, когда вы undef
выйдете или выйдете из области видимости, или вы можете использовать IO::AIO::munmap $buffer
.
Вы также можете сделать это самостоятельно другими способами, выровняв несколько больший объем памяти, но вам, по крайней мере, потребуется запросить размер страницы, поэтому решение с использованием чистого perl не может быть выполнено переносимо без помощи модулей.и / или потеря памяти.