A.6.2 局所変数と大域変数

局所変数として使用できるものは、大域変数として宣言しないで必ず局所変数として宣言してください。大域変数は、関数呼び出しやポインタ操作によって値が変化してしまう可能性があるため、最適化の効率が悪くなります。

局所変数を使用すると次の利点があります。

a. アクセス効率が良い。

b. レジスタに割り付けられる可能性がある。

c. 最適化の効率が良い

【使用例】

一時変数に大域変数を使った場合(改善前)と局所変数を使った場合(改善後)

改善前ソースコード

int tmp;
void func(int* a, int* b)
{
         tmp = *a;
         *a = *b;
         *b = tmp;
}

改善前アセンブリ展開コード

__func:
        MOV.L #_tmp,R4
        MOV.L [R1],[R4]
        MOV.L [R2],[R1]
        MOV.L [R4],[R2]
        RTS

改善後ソースコード

void func(int* a, int* b)
{
       int tmp;
       tmp = *a;
       *a = *b;
       *b = tmp;
}

改善後アセンブリ展開コード

__func:
        MOV.L [R1],R5
        MOV.L [R2],[R1]
        MOV.L R5,[R2]
        RTS