3

ほとんどの「一般的な」C/C++ コンパイラ (gcc/g++ 用、一般的なスマートフォン用のコンパイラ、Visual C++ など) で、データ構造のアライメント情報を取得または生成するためのメカニズムはありますか? (この用語には、アラインメント、パディング、配置が含まれることに注意してください。)ターゲット プラットフォームで C/C++ コードを実行する必要なく、この情報を取得したいと考えています。

(たとえば、DWARF/DWARF2 をサポートするコンパイラで、そのようなデータを確実に取得できますか?)

更新:はい、gcc でpaholeを使用できます。(これが mingw32 で機能するかどうか、もしそうなら、DWARF2 データの出力に使用される '-g' フラグがコード生成を変更するかどうか疑問に思う必要があります。) 残念ながら、サポートしなければならないコンパイラは gcc だけではありません。(Visual C++ が 2 番目の候補である可能性が最も高いです。)

更新 2: Visual C++ の場合、これは有望に見えます。Visual C++ と g++ の間、Windows、Linux、Mac OS X、iOS、および Android NDK がカバーされていると思います。

更新 3:参考までに、私がこのような情報を取得する主な理由は、CPU に制約された条件下で高パフォーマンスの読み込みを行うために逆シリアル化を回避することです。データ構造のアライメント情報を使用するカスタム ツールを作成する以外に、これを達成するためのより良い方法を考えられる場合は、お気軽に投稿してください。票指がかゆいです。

4

1 に答える 1

0

I'm not sure about other compilers, but in VC you can force struct member alignment with pragma. In fact, if you are writing an IPC mechanism that uses structs, you should force the alignment programatically around any declarations used by both processes. That way you can eliminate the potential for error if either application deviates from the standard struct member alignment.

#pragma pack(push, 1) // forces 1 byte alignment

typedef struct
{
    int sample;
    char sample2;
}FIVE_BYTES;

#pragma pack(pop) // returns to whatever alignment was in use prior to the push

See MSDN for more information

于 2012-07-05T21:07:07.703 に答える