Во-первых, вы должны сказать Linux, что хотите, чтобы он выполнял учет коммитов:
echo "2" > /proc/sys/vm/overcommit_memory
В противном случае он сохраняет устаревшее значение по умолчанию (с тех пор, как Linux была игрушечной ОС), позволяющее неограниченное количество перегрузок и ужасное падение ваших приложений, когда им не хватает физической памяти.
Также, как уже говорили другие, вам нужно проверить возвращаемое значение mmap
против MAP_FAILED
, и нет необходимости использовать mprotect
. Для начала просто передайте правильные значения от PROT_*
до mmap
.