首页 > 解决方案 > 堆地址减少,增加

问题描述

为什么堆在一定级别后增加然后减少然后再次增加? 在 Linux 操作系统中

当我研究操作系统和内存结构时,我发现一些奇怪的地址增加......

该程序很简单,只是递归调用堆栈和堆增加。

void recursive(int count){
long stack;
long* heap;

heap = (long*)malloc(sizeof(long)*100000000000);


        heap = (long*)malloc(sizeof(long)*100000);
        if((long*)heap >= (long*)&stack){
            printf("heap is contact with stack\n");
            exit(1);
        }


printf("%diteration \\ heap : %p || stack : %p\n",count, heap, &stack);
recursive(++count);

}

标签: clinuxheap-memory

解决方案


您的heap指针不指向堆的顶部。它指向分配的内存块,它可以在任何地方。最接近您要查找的是中断指针,您可以通过调用sbrk(0). 请注意,在现代系统中,您不一定有一个连续的堆。这里有一个详细的解释: brk() 系统调用是做什么的?


推荐阅读