c - malloc 后堆中断不会改变

标签 c macos memory memory-management malloc

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

相关文章:

c - 四个进程执行速度比两个进程慢

c - 按特定顺序对 argv 进行排序

cocoa - CLLocationManager 不适用于非无线连接?

Eclipse Neon 2 & 3 不断重置工作区和插件

c++ - 如何在 OS/X 上的编译时确定编译标志?

c++ - 删除动态创建的对象

ios - 在 macOS Sierra 上的任何 iOS 模拟器中 Nanosleep 太长

c - 移位不适用于变量声明赋值单行

java - 通过 DOM 解析器编辑 BIG XML

java - 处理大数据集时减少内存流失