sizeof()是否可以为同一类型返回不同的值?

时间:2015-11-12 17:58:34

标签: c struct byte sizeof vxworks

在C中,在VxWorks操作系统上,对于相同的输入参数,我在sizeof上遇到不同的返回值。

我只有一个特定结构的声明:

typedef struct Data{
    //contains ints, floats, int[], and float[]
} Data;

有两个独立的衍生任务,每个任务调用:

sizeof(Data);

两个电话的大小不同。
返回的值之一小于应有的值。

可能导致这种情况的原因是什么? 为什么sizeof会在同一类型声明上返回不同数量的字节?

2 个答案:

答案 0 :(得分:3)

尽管只有一个struct的声明,但struct中的数组的大小由宏指定。该宏在另一个文件中重新定义。

答案 1 :(得分:1)

没有

名称修改是一个单射(1比1)函数,给定一个名称和一些类型的实现总是将它映射到同一个东西。

同样是sizeof - size-of只是我们访问编译器的“结构空间量”结构知识的一种方式,所以如果它可以改变这真的真的真的很糟糕

您的库是否由同一个程序编译?你确定数据是一样的吗?这些是可以改变的事情 - 看那里。

旁注:

  

大小几乎是固定的,但事情是对齐的,比如我们有一个int和一个void* - 这是12个字节的数据,但它可以对齐到16个字节,所以{{ 1}}是8字节对齐的倍数,这在某些系统上提供了很大的性能提升。   GCC和LLVM都采用了相同的路由,LLVM将兼容性作为优先考虑事项,GCC也将旧版GCC的兼容性作为一个重要优先事项。所以void*不会改变。