【发布时间】:2015-11-12 17:58:33
【问题描述】:
在 C 语言中,在 VxWorks 操作系统上,我在 sizeof 上遇到相同输入参数的不同返回值。
我只有一个特定结构的声明:
typedef struct Data{
//contains ints, floats, int[], and float[]
} Data;
有两个独立的衍生任务,每个任务调用:
sizeof(Data);
两次调用的大小不同。
返回的值之一小于应有的值。
这可能是什么原因造成的?
为什么sizeof 在同一个类型声明中返回不同的字节数?
【问题讨论】:
-
在同一台机器上使用相同的编译器?没有。
-
或者有人在头文件顶部添加了#pragma pack(1),忘记添加#pragma pack(pop)
-
@AlecTeal 在同一台机器上使用相同的编译器?不。 是的,同一个编译器可以为一个对象生成不同的大小。不同的命令行参数和/或优化级别会影响对齐,从而影响大小。请参见 Intel 的
-align选项 (software.intel.com/en-us/articles/…) 和 Oracle 的-xmemalign、-fast和-dalign选项 (docs.oracle.com/cd/E24457_01/html/E22003/cplusplus.1.html) 使用不同的命令行参数编译不同的编译单元可能会导致对象的大小不同。 -
(cont) 例如,如果库代码是使用一组特定的对齐修改命令行参数编译的,但调用可执行文件是使用一组不同的命令行参数编译的,则可执行文件和库可以不同地解释结构的内容。 (这是使库 API 不透明的一个很好的理由。)
标签: c struct byte sizeof vxworks