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之间的比较行为,因为它们不指向同一数组的成员。