为什么堆在某个级别之后增加然后减少,然后又增加?In linux os
当我学习操作系统和内存结构时,我发现一些奇怪的地址增加了...
程序很简单,只是递归调用堆栈和堆而已。
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);
}
您的heap
指针未指向堆的顶部。它指向分配的内存块,该内存块可以在任何地方。最接近您要查找的是中断指针,可以通过调用sbrk(0)
来找到它。请注意,在现代系统中,不一定有连续的堆。以下是详细说明:What does the brk() system call do?