我正在尝试了解有关内存管理(mmap、brk、sbrk)的更多信息,我真的很困惑:
char *ptr = sbrk(0);
char *ptr2 = ptr + 100000;
*ptr2 = 8;
printf("%d\n", *ptr2);
不会触发分段错误?我在 OS X Mojave 上用 clang 编译这个。
sbrk() 的手册页说它已被弃用,但它也说 sbrk() 应该可靠地返回程序中断。如果这是真的,并且页面大小是 4096 字节,那么不应该为超出程序中断的 100000 个空格的地址设置一个值会触发段错误吗?如果它不能可靠地返回程序中断(它不能,如果您可以为超出它的地址设置值,对吗?)那么您如何可靠地找到 Mac OS 上的程序中断?
完全相同的代码在 Ubuntu 18.10 上产生了段错误。
谢谢!