Свертывает ли в файле 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;
}