コンパイラがそれをさらに最適化できるようにする C 構造体 (C struct definition ) に項目 (int、float、union など) をパックする際に従うべき考慮事項について疑問に思っていました。
従うべきガイドラインがあるかどうかを知りたいです。たとえば、単語境界への配置を許可する順序で構造に項目を追加するなどです。など?
詳細をいただければ幸いです。
よろしく、 -J
この質問には、そのような C 構造体のクロス コンパイルに向けた最適化戦略も含まれます。
コンパイラがそれをさらに最適化できるようにする C 構造体 (C struct definition ) に項目 (int、float、union など) をパックする際に従うべき考慮事項について疑問に思っていました。
従うべきガイドラインがあるかどうかを知りたいです。たとえば、単語境界への配置を許可する順序で構造に項目を追加するなどです。など?
詳細をいただければ幸いです。
よろしく、 -J
この質問には、そのような C 構造体のクロス コンパイルに向けた最適化戦略も含まれます。
本当にスペースを最小限に抑えたい場合は、配列を最大のものから最小のものに並べます。これにより、最小限のパディングが得られることが保証されます。
gccでコードをコンパイルできる場合は、paholeを使用して、改善できる構造を見つけ、それらを自動的に再パックできる可能性があります。
ここにあなたを助けるかもしれないpaholeについてのいくつかの記事があります:
プログラムの要件は何ですか? いくつの要素がありますか?どんな構造?
たとえば、いくつかの要素を持つ構造体があり、何かを検索するためにそのような要素の配列をトラバースする必要がある場合、構造体の配列ではなく、配列の構造体を実行する方が適切です。使用頻度の高いメンバーが横に並んで配置されるため、キャッシュメモリがうまく機能します。
SIMD (ベクトル) 操作を利用する場合は、すべてのメンバーを何らかの境界で整列する必要があります。
データから何を期待しているのかわからないため、何かを正しく提案することはほとんどありません.