Я пытаюсь узнать больше об управлении памятью (mmap, brk, sbrk), искренне запутавшись в том, как:
char *ptr = sbrk(0);
char *ptr2 = ptr + 100000;
*ptr2 = 8;
printf("%d\n", *ptr2);
Не вызывает ошибку сегментации?Я компилирую это с помощью clang в OS X Mojave.
Страница man для sbrk () говорит, что она устарела, но также говорит, что sbrk () должна надежно возвращать разрыв программы.Если это так, а размер страницы составляет 4096 байт, то не должна ли установка значения для адреса в 100000 пробелов за разрыв программы вызывать ошибку?Если он не может надежно вернуть разрыв программы (чего не может, если вы можете установить значения для адресов за его пределами, верно?), То как вы надежно находите разрыв программы в Mac OS?
Точныйтот же код вызвал ошибку в Ubuntu 18.10.
Спасибо!