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()、メソッド呼び出しを行わない 2 つの連続した呼び出しは、例と同じくらい効果的です。

ただし、例の数値の違いは、リンクされた質問の数値の違いに比べて大きくなっています。ヒープは確かに一方向に大きくなりますが、それは、隣接する 2 つmalloc()の呼び出しで、その方向を意味するアドレス値の変化があることを意味するものではありません。これは一般的な傾向です。

スタックとヒープは互いに向かって成長します。ヒープがどの方向に成長するかを知る最も簡単な方法は、スタックがどの方向に進むか (リンクされた質問から得たもの) を見つけ、ヒープが他の方向に成長することを知ることです。

于 2012-06-24T10:13:01.137 に答える