インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

GAP メッセージ (診断 ID 30757)

メッセージ

未使用のフィールド '%s' を構造体 '%s' から削除します。

このメッセージは、プログラム全体で認識される場合のみ出力されます。

アドバイス

クラスまたは構造体に未使用のフィールドがあります。構造体定義から未使用のフィールドを削除すると、メモリー使用量が減少し、不要なデータがキャッシュを占領しなくなるためキャッシュ効率が向上します。

アドバイスは、ソースコードの分析結果に基づいて出力されます。未使用のフィールドを削除する前に、アプリケーションのほかの領域でそのフィールドにアクセスしていないことを確認する必要があります。 また、構造体フィールドが特定の順序でなければならないコードでは未使用のフィールドを削除する際に注意が必要です。 例えば、アプリケーション・コードでフィールドのアドレスを使用して別のフィールドにアクセスしている場合、未使用のフィールドが削除されると動作しなくなる可能性があります。 そのようなコードは有効なコードとは見なされません。

次の例について考えてみます。

//unused_field_1.c
struct str {
    int a1, b1, c1, d1, e1;
};

struct str sp[1000000]; 
 int hot_func1() {
    int i, ret = 0; 
    for (i = 0; i < 1000000; i++) {
        ret += sp[i].a1;
        ret += sp[i].b1;
    }
    return ret; 
}
 
int hot_func2() {
    int ret = 0, i;
    for (i = 0; i < 1000000; i++) {
        ret += sp[i].a1;
        ret -= sp[i].c1;
    }
    return ret; 
}
 
int hot_func3() {
    int ret = 0, i;
    for (i = 0; i < 1000000; i++) {
        ret += sp[i].d1;
    }
    return ret; 
}
 
main() {
    hot_func1();
    hot_func2();
    hot_func3(); 
}

この例では、次のようにコードを変更するだけで未使用のフィールドを削除できます。

//unused_field_1.c 
struct str {
    int a1, b1, c1, d1; 
}; 
...

確認

このコード変更によってオリジナルのプログラムのセマンティクスが変更されないことを確認してください。

関連情報