在C中,在VxWorks操作系统上,对于相同的输入参数,我在sizeof
上遇到不同的返回值。
我只有一个特定结构的声明:
typedef struct Data{
//contains ints, floats, int[], and float[]
} Data;
有两个独立的衍生任务,每个任务调用:
sizeof(Data);
两个电话的大小不同。
返回的值之一小于应有的值。
可能导致这种情况的原因是什么?
为什么sizeof
会在同一类型声明上返回不同数量的字节?
答案 0 :(得分:3)
尽管只有一个struct的声明,但struct中的数组的大小由宏指定。该宏在另一个文件中重新定义。
答案 1 :(得分:1)
没有
名称修改是一个单射(1比1)函数,给定一个名称和一些类型的实现总是将它映射到同一个东西。
同样是sizeof
- size-of只是我们访问编译器的“结构空间量”结构知识的一种方式,所以如果它可以改变这真的真的真的很糟糕
您的库是否由同一个程序编译?你确定数据是一样的吗?这些是可以改变的事情 - 看那里。
旁注:
大小几乎是固定的,但事情是对齐的,比如我们有一个
int
和一个void*
- 这是12个字节的数据,但它可以对齐到16个字节,所以{{ 1}}是8字节对齐的倍数,这在某些系统上提供了很大的性能提升。 GCC和LLVM都采用了相同的路由,LLVM将兼容性作为优先考虑事项,GCC也将旧版GCC的兼容性作为一个重要优先事项。所以void*
不会改变。