#include #include #include #include #include int main(int argc, char* argv[]) { char* memindex[1000] = {0}; int eat = 0; int wait = 0; int i = 0; if (argc < 2) { printf("Usage: ./eat_release_memory #allocate num * 8 MB and free num MB memory\n"); return; } sscanf(argv[1], "%d", &eat); if (eat <= 0 || eat >= 1000) { printf("num should larger than 0 and less than 1000\n"); return; } printf("Allocate memory in MB size: %d\n", eat * 8); printf("Allocation memory Begin!\n"); for (i = 0; i < eat; i++) { memindex[i] = (char*)mmap(NULL, 8*1024*1024, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); memset(memindex[i], 0, 8*1024*1024); } printf("Allocation memory Done!\n"); sleep(2); printf("Now begin to madvise free memory!\n"); for (i = 0; i < eat; i++) { madvise(memindex[i] + 7*1024*1024, 1024*1024, MADV_DONTNEED); } sleep(5); printf("Now begin to release memory!\n"); for (i = 0; i < eat; i++) { munmap(memindex[i], 8*1024*1024); } }