2

我正在尝试了解有关内存管理(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 上产生了段错误。

谢谢!

4

0 回答 0