Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 堆地址减少,堆地址增加_C_Linux_Heap Memory - Fatal编程技术网

C 堆地址减少,堆地址增加

C 堆地址减少,堆地址增加,c,linux,heap-memory,C,Linux,Heap Memory,为什么堆在达到某个级别后会先增加后减少,然后再增加? 当我研究操作系统和内存结构时,我发现一些奇怪的地址增加了 该程序很简单,只需递归调用堆栈和堆即可 void recursive(int count){ long stack; long* heap; heap = (long*)malloc(sizeof(long)*100000000000); heap = (long*)malloc(sizeof(long)*100000); if((long*)h

为什么堆在达到某个级别后会先增加后减少,然后再增加?

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

该程序很简单,只需递归调用堆栈和堆即可

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);
}

堆指针没有指向堆的顶部。它指向分配的内存块,它可以在任何地方。最接近您要查找的是break指针,您可以通过调用sbrk0找到它。请注意,在现代系统中,不一定有连续堆。以下是详细说明:

可以是一个较大的块在一个方向上使用,以服务于另一个方向上的较小的块。请直接在问题中以文本形式提供更多的输出。确保显示至少三个突然的变化。内存地址,正如malloc和friends所给出的,不必线性增加。我不确定你用这段代码来证明什么意思?堆的地址可能高于堆栈的地址,也可能不高于堆栈的地址。。。除非malloc给你一个空指针作为回报。。。差不多就是这样。那又怎么样?另外:。未定义heap和&stack之间的比较行为,因为它们不指向同一数组的成员。