パディング効果を減らすために、構造体のフィールドを手動で並べ替えるのに数分を費やしました[1]。私の直感では、Perl スクリプトを作成したり、この種の最適化を行ったりすることに時間を費やしたほうがよいのではないかと考えています。
私の質問は、これも冗長かどうかです。私が認識していないツール、または構造体をパックするために[2]をオンにできるはずのコンパイラ機能がすでにありますか?
この問題は、これがいくつかの異なるアーキテクチャ間で一貫して最適化される必要があるという事実によってさらに複雑になります。そのため、使用するツールが何であれ、異なる構造体アラインメントとポインター サイズも考慮できる必要があります。
EDIT:簡単な説明 - 私がしたいのは、パディングなしでコンパイルするように構造体を「パック」するのではなく、パディングを避けるためにソースコードのフィールドを並べ替えることです。
編集 #2: 別の問題: 構成によっては、一部のデータ型のサイズも変わる場合があります。明らかなものは、さまざまなアーキテクチャのポインターとポインター差分ですが、浮動小数点型 (「正確さ」に応じて 16、32 または 64 ビット)、チェックサム (「速度」に応じて 8 または 16 ビット) などもあります。その他の明らかでないもの。
[1] 問題の構造体は、組み込みデバイスで何千回もインスタンス化されるため、構造体の 4 バイト削減ごとに、このプロジェクトの成功と失敗の違いを意味する可能性があります。
[2] 利用可能なコンパイラは、GCC 3.* および 4.* 、Visual Studio、TCC、ARM ADS 1.2、RVCT 3.*、およびその他いくつかの不明なものです。