【发布时间】:2014-01-31 09:17:05
【问题描述】:
如果结构声明没有__attribute__(align(8)),我希望编译器为我生成警告。
例如,如果一个结构是这样声明的:
struct my_float {
float number;
} __attribute__((aligned(8)));
它不会产生任何警告。但是如果我声明另一个这样的结构:
struct my_float {
float number;
};
编译器会为我生成一个警告。
我的工作环境是 linux/GCC。
【问题讨论】:
-
我不相信这是可能的。据我所知,没有办法在每个
struct定义上强制一个属性。不幸的是,也没有命令行开关来设置它(例如,与打包不同)。但是,我不确定您为什么需要这样的东西。 -
为什么这对我很重要? 1)我的机器上运行了两个程序,一个是 32 位,另一个是 64 位,它们有一些共享结构。现在需要根据 64 位配置来对齐这些共享结构。
-
你在说什么? 64 位机器并不意味着所有内容都需要 8 字节对齐。事实上,通常大多数类型(包括
int和float)具有完全相同的大小和对齐方式。较大的类型(例如 *nix 上的long int)可能也需要不同的对齐方式,但大小差异是一个更大的问题。 -
@iDebD_gh 啊,所以 OS X 增加了
long long的对齐而不增加大小。我仍然认为你不应该盲目地增加所有东西的对齐方式,只有在 32/64 位中具有不同对齐方式的类型。您甚至可以进行自动化测试,以确保相关结构具有正确的大小和对齐方式。 -
您发布的有关磁盘上文件的链接与数据对齐无关。保存到磁盘时对齐没有意义。您应该更关心填充,但您没有将原始结构保存到磁盘,是吗?部分还说:“最后,永远不要低估通用交换格式的便利性”。
标签: c linux gcc compiler-construction