执行sizeof(char)时输出错误

时间:2017-06-19 09:40:23

标签: ios objective-c xcode

我的问题是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));

}

输出:sizeof(char):2

1 个答案:

答案 0 :(得分:2)

你没有得到错误"输出,当(Objective-)C编译器列出struct时,允许使用内部填充,以便字段从其类型的最佳内存对齐开始。

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

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

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