Как заполнить пространство виртуальной памяти в Linux только с использованием единого файла изображения?

Таким образом, я застреваю здесь... Я попытался использовать mmap (), но он не будет содержать файлы в память, если они не будут использоваться чем-то, чему я верю? Вот код:

/* For the size of the file. */
#include <sys/stat.h>
/* This contains the mmap calls. */
#include <sys/mman.h> 
/* These are for error printing. */
#include <errno.h>
#include <string.h>
#include <stdarg.h>
/* This is for open. */
#include <fcntl.h>
#include <stdio.h>
/* For exit. */
#include <stdlib.h>
/* For the final part of the example. */
#include <ctype.h>

/* "check" checks "test" and prints an error and exits if it is
true. */

static void
check (int test, const char * message, ...)
{
if (test) {
    va_list args;
    va_start (args, message);
    vfprintf (stderr, message, args);
    va_end (args);
    fprintf (stderr, "\n");
    exit (EXIT_FAILURE);
}
}

int main ()
{
/* The file descriptor. */
int fd;
/* Information about the file. */
struct stat s;
int status;
size_t size;
/* The file name to open. */
const char * file_name = "MentalClarity.png";
/* The memory-mapped thing itself. */
const char * mapped[200000];
int i;
int j;

/* Open the file for reading. */
fd = open ("me.c", O_RDONLY);
check (fd < 0, "open %s failed: %s", file_name, strerror (errno));

/* Get the size of the file. */
status = fstat (fd, & s);
check (status < 0, "stat %s failed: %s", file_name, strerror (errno));
size = s.st_size;

/* Memory-map the file. */
for(j=1;j<=200000;j++){
mapped[j] = mmap (NULL, size, PROT_READ, 0, fd, 0);
check (mapped == MAP_FAILED, "mmap %s failed: %s",
       file_name, strerror (errno));
}    

int value=0;
while(value!=1){
printf("Enter 1 to exit");
scanf("%d",&value);
}


return 0;
}

Я просто пытаюсь заполнить свою область подкачки одним файлом изображения, если это даже возможно?Заранее спасибо.

-1
задан 9 October 2016 в 23:59

1 ответ

Ubuntu избегает использования подкачки, если ей не нужна память. Можно просто продолжать выделять и заполнять память, пока она не должна быть разбита на страницы. Вы не должны поражать каждый байт, просто наименее однобайтовое на каждой странице. Вы могли использовать цикл, где Вы выделяете страницу памяти и пишете в нее в цикле для заполнения памяти.

Используя mmap карты файл в изображение виртуальной памяти приложения. Любое действие подкачки страниц для отображенной памяти будет использовать файл, а не подкачку.

Вы можете делать то же путем записи большого файла в /tmp, если Вы используете tmpfs в качестве его файловой системы.

современные операционные системы позволяют Вам превышать возможности виртуальной памяти. Это позволяет использование структур памяти пространства, которые далеко превышают доступную память.

0
ответ дан 28 September 2019 в 10:37

Другие вопросы по тегам:

Похожие вопросы: