gcc (GCC) 4.7.0
c89
x86_64
こんにちは、__attribute __(__ packed__)を使ったパディング構造は本当に価値がありますか?私は疑問に思って
は、それが構造上__attribute__ ((__packed__))
を使用して使用して価値があります。それによって構造がより小さくなると私には思われます。私は以下のテストを行った。だからそれを使うとサイズが有利になるでしょう。
他のコンパイラ間で互換性がないため、使用しないケースです。したがって、Visual Studio C++ではこれは機能しません。その他のコンパイラも同様です。
コンパイラはコードを最適化していませんか?だから、実際にそれをコンパイラに任せて、何をすべきかを決めることはパフォーマンスにとっては良いでしょうか?
aligned属性を使用すると違いがありますか?私はそれが任意の提案のために12
感謝のサイズを返したことを加えた__attribute__((packed, aligned(4)))
、
#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;
}
アライメントされていないメモリアクセスが遅い – BlackBear
あなたの構造の例では、それを梱包して、それを詰め込むことは特に価値がありません。スペースを節約しないで、 'weight'フィールドの位置をずらすだけです。そのように定義されたいくつかの既存のレイアウトとマッチすることが唯一の理由です(あなたのプラットフォーム上の 'int'のオブジェクト表現が' age'フィールドなどに対して正しいことを前提としています)。 –