触发了大量的大页的回收why?

#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>

int main()
{
    int i, fd, pid;
    char *ptr;

    printf("alloc vm");
    ptr = malloc(4096*1024*100);

    for (i = 0; i < 1000*100; i++) {
        ptr[i*4096] = 1;
        if (!(i%2000)) {
            printf("%d\n", i); 
        }
    }   
    while(1);

}

有大量的大页的回收,为什么映射了这么多的大页呢?

mmap区域换成普通的大小,这下都是普通的page了,没有了大页的映射了,都是普通的4k小页

#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>

int main()
{
    int i, fd, pid;
    char *ptr;

    printf("alloc vm\n");
    int ii = 1024*100;
next:
    if (ii-- < 0)
        goto out;
    else {
//      if (ii % 10000 == 2)
    //  printf("ii: %d\n", ii);
    //  printf("On: %d\n", 100 - ii * 100 / 1024*100);
    }   
    ptr = malloc(4096);
    
    ptr[0] = 1;
    goto next;
out:
    printf("write done\n");
    while(1);

}

 

posted @ 2017-11-13 22:51  honpey  阅读(151)  评论(0编辑  收藏  举报