スタックとヒープ上の変数(ポインタ)のアドレスの長さに相関があるかどうか不思議です。多くの場合、スタック変数に関するものは通常、ヒープと比較して長いことがわかりました。例えば、以下の簡単なテストを考慮する:スタックとヒープのメモリ位置パターン
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
int *j = malloc(sizeof(int)); *j = 0;
printf("&i = %p\n j = %p\n", &i, j);
free(j);
return 0;
}
出力:
&i = 0x7fffe9c7fa5c
j = 0x100e010
これらの結果は、Linuxはgcc
を使用して得られます。これはOS /コンパイラに依存する可能性がありますか?
100%確信はありませんが、CPU/OS /コンパイラ固有の順番であると思います。また、物理アドレスが表示されない可能性もあります。また、ヒープが大きくなり、スタックが小さくなるので、スタック変数のアドレスが下位になります。 – Corbin