gcc (GCC) 4.7.0
c89
x86_64
你好,
我想知道在结构体上使用__attribute__ ((__packed__))
是否值得。据我测试,使用它可以使结构体的大小更小。因此,在大小方面使用它会有优势。
不使用它的原因是它在其他编译器中不具备可移植性,例如在Visual Studio C++中无法使用,其他编译器也一样。
编译器不会对代码进行优化吗?所以让编译器决定如何处理可能更有利于性能?
使用aligned属性会有任何区别吗?__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;
}