我刚刚发现了sbrk(0)调用的有趣行为。如果在程序开始时我先调用sbrk(0),然后再调用另一个sbrk(0),则它将返回不同的程序中断。所有后续调用均返回相同的地址。
...
printf("[1] program break at: %10p\n", sbrk(0));
printf("[2] program break at: %10p\n", sbrk(0));
printf("[3] program break at: %10p\n", sbrk(0));
...
结果:
[1] program break at: 0x1563000
[2] program break at: 0x1584000
[3] program break at: 0x1584000
奇怪的是,程序中断不应在sbrk(0)更改
有人可以解释我发生了什么事吗?