3

C++ が変数をどのように処理して、次々と宣言および初期化される整数変数のメモリ内の 2 つのアドレス間の距離が 3537492 - 3537480 = 12 になるようにしているのでしょうか (私はビット (?) を想定しています)。

#include <cstdio>

using namespace std;

int main( int argc, char ** argv )
{
    int x = 1;
    int y = 2;

    printf("int:\t%d\n", sizeof(int));
    printf("unsigned int:\t%d\n", sizeof(unsigned int));

    printf("Address of x\n\tHex:\t%p\n\tDec:\t%d\n", &x, &x);
    printf("Address of y\n\tHex:\t%p\n\tDec:\t%d\n", &y, &y);

    return 0;
}

出力:

整数: 4
符号なし整数: 4
x のアドレス
        16 進数: 0035FA54
        12月: 3537492
yのアドレス
        16 進数: 0035FA48
        12月: 3537480
4

3 に答える 3

1

私の推測では、何らかのパフォーマンス上の理由から、コンパイラが単語境界に沿って整数を整列させていると思われます。ワードが 128 ビットまたは 16 バイトの場合、このような動作により、変数間に 12 バイトの距離が生じます。私が正しいかどうかを知るには、コンパイルしているアーキテクチャについてもう少し理解する必要があります。しゃれは意図されていません。http://en.wikipedia.org/wiki/Data_structure_alignmentを参照

于 2015-01-27T01:18:41.820 に答える