这里记录下调试过程中发现的测试程序中mmap fail导致的内存崩溃问题。
这是测试程序:
extern int errno;
pdata = mmap(NULL, /*PAGE_SIZE*page_counts*/size, PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_SHARED|MAP_POPULATE, -1, 0);
if (pdata == MAP_FAILED) {
printf(" mmap errno:%d\n",errno);
}
unix系统调试可以通过包含#include <errno.h>,然后引用errno这个变量,每一次调用失败系统就会自动填充,我们通过打印可以得到错误信息。
这里我们读到的错误信息是22,通过errno.h可以看到是 EINVAL,无效的参数引起的,查看系统mmap支持的参数类型,发现其flags参数不支持MAP_POPULATE,删除后运行正常。