Skip to content

Instantly share code, notes, and snippets.

@azat
Created October 3, 2020 22:22
Show Gist options
  • Select an option

  • Save azat/12ba2c825b710653ece34dba7f926ece to your computer and use it in GitHub Desktop.

Select an option

Save azat/12ba2c825b710653ece34dba7f926ece to your computer and use it in GitHub Desktop.
test-MADV_DONTNEED.c
// Gist to check possible issues with MADV_DONTNEED
// For example it does not supported by qemu user
// There is a patch for this [1], but it hasn't been applied.
// [1]: https://lists.gnu.org/archive/html/qemu-devel/2018-08/msg05422.html
#include <sys/mman.h>
#include <stdio.h>
#include <stddef.h>
#include <assert.h>
#include <string.h>
int main(int argc, char **argv)
{
void *addr = mmap(NULL, 1<<16, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (addr == MAP_FAILED) {
perror("mmap");
return 1;
}
memset(addr, 'A', 1<<16);
if (!madvise(addr, 1<<16, MADV_DONTNEED)) {
puts("MADV_DONTNEED does not return error. Check memory.");
for (int i = 0; i < 1<<16; ++i) {
assert(((unsigned char *)addr)[i] == 0);
}
} else {
perror("madvise");
}
if (munmap(addr, 1<<16)) {
perror("munmap");
return 1;
}
return 0;
}
@azat
Copy link
Copy Markdown
Author

azat commented Oct 3, 2020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment