gcc (GCC) 4.7.0
c89
x86_64
こんにちは、
__attribute__ ((__packed__))
on 構造を使用する価値があるかどうか疑問に思っています。それにより、構造のサイズが小さくなるように思えます。以下で実行したテストに従ってください。したがって、それを使用すると、サイズの利点になります。
他のコンパイラ間で移植できないため、使用しない場合があります。Visual Studio C++ の場合、これは機能しません。さらに、他のコンパイラも同様です。
コンパイラはコードを最適化しませんか? では、実際に何をすべきかを決定するのはコンパイラーに任せた方がパフォーマンスが向上するのでしょうか?
整列属性を使用すると違いはありますか? __attribute__((packed, aligned(4)))
私がそれを追加したとき、それは12のサイズを返しました.
ご提案いただきありがとうございます。
#include <stdio.h>
struct padded {
int age; /* 4 */
char initial; /* 1 + 3 padded bytes */
int weight; /* 4 --> total = 12 */
};
struct __attribute__ ((__packed__)) unpadded {
int age; /* 4 */
char initial; /* 1 */
int weight; /* 4 --> total = 9 */
};
int main(int argc, char **argv)
{
struct padded padded_test;
struct unpadded unpadded_test;
printf("Padded [ %ld ]\n", sizeof(struct padded));
printf("Unpadded [ %ld ]\n", sizeof(struct unpadded));
return 0;
}