gpt4 book ai didi

c - malloc 后堆中断不会改变

转载 作者:行者123 更新时间:2023-12-04 22:51:07 24 4
gpt4 key购买 nike

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com