【发布时间】:2020-09-19 14:10:49
【问题描述】:
为什么堆在一定级别后增加然后减少,然后再增加? In linux os
我在研究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);
}
【问题讨论】:
-
可能是使用较大的块(在一个方向)来服务较小的块(在另一个方向)。请直接在问题中以文本形式提供更多该输出。确保至少显示三个突然的变化。
-
内存地址,由
malloc和好友给定,不必线性增加。 -
我不确定你用这段代码证明什么?堆可能会或可能不会分配在比堆栈更高的地址......除非 malloc 给你一个空指针作为回报......这就是它。所以呢?另外:ASLR.
-
heap和&stack之间比较的行为是未定义,因为它们不指向相同的成员 数组。
标签: c linux heap-memory