heap-memory - 判断堆是否增长

标签 heap-memory 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

或者这个问题是否含糊不清,因为堆永远不会向下增长?

最佳答案

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

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

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

关于heap-memory - 判断堆是否增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176455/

相关文章:

c# - .net 应用程序的非托管堆大小

Titanium 中的 Android DDMS 未启动内存堆

java - Maven 部署插件

arrays - Bash数组迭代方向和性能

html - 元素溢出方向从右到左的问题

python - 查找具有 2 个点的向量

layout - flutter 中从右到左(RTL)

CSS 旋转功能。如何指定纺纱方向?

java - 避免内存不足错误

java - 我在向数据库插入记录时遇到 java 堆空间错误?