私はクリティカルパスの関数を使って作業しています。コードはそのようになっていますPOD配列の最初の要素を初期化し、残りの要素は初期化しません
void ProcessData(const byte* input, size_t size)
{
ALIGN_ARRAY(16) int32_t m0[2] = { ((const int32_t*)input)[0] };
ALIGN_ARRAY(16) int32_t m1[2] = { ((const int32_t*)input)[1] };
...
}
最初の要素、m0[0]
は、私が気に1です。 2番目の要素であるm0[1]
は、スクラッチスペースであり、m
がSIMDエンジンに出荷される前に整列しています。 m0[1]
に値が設定されますが、初期化する必要はありません。
このコードは、すべてを最小限に抑えるため、その重要なのは、繰り返しベンチマーク結果に非常に影響力と呼ばれています。私はコードがより最適化されるかもしれないので、コンパイラが最初の要素を初期化できることを知りたい。
にはどうすれば最初の要素だけが初期化されていることを確認しないと、アレイ内の残りの要素は初期化されませんか?それも可能ですか?
この質問は、初期化は割り当てとは異なっていることを、私も承知しているInitialization of a normal array with one default value、Static array initialization of individual elements in C++とArray initialization with {0}, {0,}?
のような質問の反対です。 zero-, default- and value-initializationの詳細とPODがどのようにそれに影響を与えるかについて説明します。
次のいずれか何かすべてを初期化しません。あなたの場合は、配列を初期化しないで、最初の要素に割り当てます。 –
ありがとう@KerrekSB。私はそれを恐れていました。それが事実なら、あなたもその記録に答えることができます。 – jww