找到堆是否成长

时间:2012-06-24 09:49:04

标签: heap direction

参考下面的链接,它解释了如何查找机器堆栈是否在内存中长大...我想知道以下是否是正确的方法来查找机器堆的增长或减少存储器中。

How would you find out if a machine’s stack grows up or down in memory? (JAVA)

我的代码

void findHeapDirection(int *a) {

   int *b;
   b = (int*)malloc(sizeof(b));  
   printf("\naddress of a %x",a);   
   printf("\naddress of b %x",&b);

   if(b > a) 
     printf("\n>>heap grows up");
   else
    printf("\n>>heap grows down");   

    free(b);

  }   

并像这样调用此函数

 int *a;
 a = (int*)malloc(sizeof(a));
 findHeapDirection(a);
 free(a);

这是我机器上的输出..

address of a 5417b0
address of b 28ff14
>>heap grows up

或者这个问题是不明确的,因为堆永远不会向下生长?

1 个答案:

答案 0 :(得分:2)

您不需要函数调用来测试堆的内容。那就在linked question about the direction of the stack中,因为编译器可能会在单个帧(或函数)中对堆栈上的变量进行重新排序。它不会对函数调用执行此操作,因此两次连续的malloc()调用之间没有方法调用将与您的示例一样有效。

但是,与链接问题中的数字之间的差异相比,示例中的数字之间的差异很大。堆确实在一个方向上增长,但这并不意味着两个相邻的malloc()调用将具有地址值的变化,这意味着该方向 - 它更像是一般趋势。

堆栈和堆相互增长。找出堆增长方向的最简单方法是找出堆栈的方向(你从链接的问题中得到的)并知道堆在另一个方向上增长。