#include <stdio.h>
#include <errno.h>
#include <sys/resource.h>
int main(int argc, char *argv[]) {
printf("main: %p\n", main);
printf("brk before malloc: %p\n", sbrk(0));
int *a = malloc(sizeof(int) * 100);
printf("malloc at %p\n", a);
printf("brk after malloc: %p\n", sbrk(0));
}
输出:
main: 0x108f9ae90
brk before malloc: 0x8fbc000
malloc at 0x7fb380c02b40
brk after malloc: 0x8fbc000
为什么break address在malloc之后没有改变?另外,为什么堆顶(break)地址距离malloc的地址那么远,甚至低于main的地址,在text段?
如果我没理解错的话,第二次sbrk调用的返回值应该是最大的,因为它是堆顶的地址,堆数据的地址应该比文本段高。我期待 2nd brk > malloc'ed addr > 1st brk > main,但显然这里不是这种情况。
最佳答案
sbrk 的当前 Mac OS X 实现是一个仿真,最大分配为 4 兆字节。参见 here .
关于c - malloc 后堆中断不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52869809/