执行 sizeof(char) 时获得错误的输出



我的问题是sizeof(char(是1字节,但在执行下面的代码时,为什么我得到错误的输出。请帮助我。谢谢

typedef struct {
   int x;      
   int y;
   char a;
}Point2D;
main() {
   Point2D *myPoint=malloc(sizeof(Point2D));
   NSLog(@"sizeof(Point2D): %zu", sizeof(Point2D));
}

输出: sizeof(Point2D( : 12//但它应该返回 9 [int + int + char/4 + 4 + 1]

注意:单独运行char时,我得到了正确的输出

例:

typedef struct {
   char a;
   char b;
}Point2D;
main() {
   Point2D *myPoint=malloc(sizeof(Point2D));
   NSLog(@"sizeof(Point2D): %zu", sizeof(char));
}

输出: 大小(字符( : 2

你不会得到"错误"的输出,当(Objective-(C编译器布置一个struct时,它被允许使用内部填充,以便字段从其类型的最佳内存对齐开始。

如果需要struct的大小恰好是其字段大小的总和,则可以使用 __attribute__((__packed__)) 。例如:

typedef struct
{
   int x;
   int y;
   char a;
} __attribute__((__packed__)) Point2D;

大小为 9 .但是,由于 CPU 必须处理没有最佳存储对齐的值,因此对字段的访问可能会变慢。

最新更新