2

参考下面的链接,该链接解释了如何查找机器堆栈是否在内存中增长...我想知道以下是否是查找机器的堆在内存中增长还是下降的正确方法。

您如何确定机器的堆栈在内存中是向上还是向下增长?(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

还是这个问题模棱两可,因为堆永远不会向下增长?

4

1 回答 1

2

你不需要函数调用来测试堆的东西。这就是关于堆栈方向的链接问题,因为编译器可能会在单个帧(或函数)内对堆栈上的变量重新排序。它不会对函数调用执行此操作,因此两个连续malloc()调用之间没有方法调用将与您的示例一样有效。

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

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

于 2012-06-24T10:13:01.137 回答