【发布时间】:2020-01-16 15:28:13
【问题描述】:
我用 g++ 编译了这个程序。它打印出“不平等”。
如果我不使用“packed”属性,它会打印“equal”。
我不知道“打包”属性是如何导致差异的。
顺便说一句, 由 clang++ 构建的可执行文件打印“equal”。
#include <iostream>
struct __attribute__ ((packed)) Packed {
char a;
int b;
int c;
char d;
};
void test(const int &i, int *ptr) {
std::cout << ((&i == ptr) ? "equal" : "unequal") << std::endl;
}
int main () {
Packed p;
p.c = 1;
test(p.c, &p.c);
return 0;
}
【问题讨论】:
-
__attribute__((packed)) 变量属性 它指定成员字段具有最小可能的对齐方式。也就是说,一个字节用于变量字段,一个位用于位字段,除非您使用对齐属性指定更大的值。
标签: c++