私はここで私の快適ゾーンの少し外に出ているかもしれませんが、memalignと呼ばれるmallocにバリエーションがあるようです:
void *memalign(size_t alignment, size_t size);
The memalign() function allocates size bytes on a specified
alignment boundary and returns a pointer to the allocated
block. The value of the returned address is guaranteed to be
an even multiple of alignment. The value of alignment must
be a power of two and must be greater than or equal to the
size of a word.
これはすべてのプラットフォームに存在する場合と存在しない場合がありますが、これは非常に一般的なようです。
int posix_memalign(void **memptr, size_t alignment, size_t size);
で見られる:
http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_memalign.html
ここで、ISO / JTC1 / SC22 / WG14 C、現在のISOC標準ISO/ IEC 9899:1990プログラミング言語の改訂に関する委員会の作業草案によって提案された固定幅型宣言のデータ型-C、(私はマンページで)クロスプラットフォームとクロスアーキテクチャが安定していることを読みました。
したがって、構造体メンバーの下位レベルを調べた場合、それらが整数のint32_tやuint32_tなどに基づいていることを願っています。次のようなPOSIXタイプがあります。
/*
* POSIX Extensions
*/
typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
したがって、ここでは、これらの完全にクロスプラットフォームの安定したデータ型として定義された型のみを使用して構造体を構築することが可能であり、最終的には、コードをコンパイルする場所や方法に関係なく、構造体は常に同じサイズになると考えています。
覚えておいてください、私はここでストレッチをしていて、他の誰かが私の考えを明確にし、おそらく修正することを望んでいます。