Свертывает ли в файле mmap потребление памяти?

Я пытаюсь преобразовать файл 64M в память, а затем прочитать и записать его. Но иногда определенный диапазон в этом файле больше не будет использоваться, поэтому я позвонил fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 16 << 20, 16 << 20); выпустить диапазон 16М внутри него.

Тем не менее, я считаю, что потребление памяти, кажется, не изменился (как free -m и из cat /proc/meminfo).

Я понимаю, что fallocate выкопает некоторые дыры в файле и вернет такой диапазон обратно в файловую систему. Но я не уверен, уменьшит ли это потребление памяти для mmaped файлов.

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

Big.file - это обычный файл размером 64 МБ, а не разреженный файл.

#define _GNU_SOURCE

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <linux/falloc.h>
#include <stdint.h>

int main(int argc, char *argv[])
{
        uint8_t *addr;

        int fd = open("home/big.file", O_RDWR | O_CREAT, 0777);
        if (fd < 0)
                return -1;

        addr = (uint8_t *)mmap(NULL, MMAP_SIZE , PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
        if (addr < 0)
                return -1;

        printf("data[0x%x] = %d\n", offset, addr[offset]);
        getchar();
        fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 16 << 20, 16 << 20);
        getchar();

        close(fd);
        return 0;
}

0 ответов

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