Является ли madvise(*, *, MADV_DONTNEED) чисто рекомендательным? Я пробовал сканировать /proc/self/maps и вызывать на них madvise(addr, size, MADV_DONTNEED):
Есть ли простой способ определить (из /proc/self/maps, /proc/self/smaps или иначе), какие сегменты памяти принадлежат процессу разрешено ли вызывать madvise(*, *, MADV_DONTNEED)?
Является ли madvise(*, *, MADV_DONTNEED) чисто рекомендательным? Я пробовал сканировать /proc/self/maps и вызывать на них madvise(addr, size, MADV_DONTNEED): [code]#include #include
int main(void) { FILE *fp; char line[1024];
fp = fopen("/proc/self/maps", "r"); if (fp == NULL) { perror("Failed to open maps file"); return 1; }
while (fgets(line, sizeof(line), fp)) { char addr[32], perms[8], offset[32], dev[32], inode[32], path[256]; unsigned long start, end;
int ret = madvise((void*)start, end - start, MADV_DONTNEED); if(ret == 0) printf(" OK\n"); else printf(" Error\n"); fflush(stdout); }
fclose(fp); } [/code] Но это печатает: [code] OK OK OK OK Segmentation fault [/code] Есть ли простой способ определить (из /proc/self/maps, /proc/self/smaps или иначе), какие сегменты памяти принадлежат процессу разрешено ли вызывать madvise(*, *, MADV_DONTNEED)?