引用下面的链接,该链接解释了如何查找机器堆栈在内存中是否向上或向下增长...我想知道以下是否是查找机器堆在内存中向上或向下增长的正确方法内存。
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
或者这个问题是否含糊不清,因为堆永远不会向下增长?
最佳答案
您不需要函数调用来测试堆上的东西。就在 linked question about the direction of the stack 中因为编译器可能会在单个框架(或函数)内对堆栈上的变量进行重新排序。对于函数调用,它不会这样做,因此连续两次 malloc()
之间没有方法调用的调用与您的示例一样有效。
但是,与链接问题中的数字之间的差异相比,示例中的数字之间的差异很大。堆确实朝一个方向增长,但这并不意味着两个相邻的 malloc()
调用的地址值将会发生变化,这表明了该方向——这更像是一个总体趋势。
栈和堆相互向着增长。找出堆增长方向的最简单方法是找出堆栈的走向(您可以从链接的问题中获得)并知道堆在另一个方向上增长。
关于heap-memory - 判断堆是否增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176455/