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

Ios 执行sizeof(char)时获得错误的输出,ios,objective-c,xcode,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)

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

您没有得到“错误”的输出,当(目标-)C编译器布局
结构时,允许使用内部填充,以便字段以其类型的最佳内存对齐方式开始

如果您需要一个
结构的大小
正好是它的字段大小之和,您可以使用
\uuuuuu属性((\uuuu packed\uuuu))
。例如:

typedef struct
{
   int x;
   int y;
   char a;
} __attribute__((__packed__)) Point2D;
大小为
9
。但是,由于CPU必须处理没有最佳存储对齐的值,因此对字段的访问可能会较慢。

当(目标-)C编译器布局
结构时,允许使用内部填充,以便字段从其类型的最佳内存对齐处开始

如果您需要一个
结构的大小
正好是它的字段大小之和,您可以使用
\uuuuuu属性((\uuuu packed\uuuu))
。例如:

typedef struct
{
   int x;
   int y;
   char a;
} __attribute__((__packed__)) Point2D;
大小为
9
。但是,由于CPU必须处理没有最佳存储对齐的值,因此对字段的访问速度可能较慢。

可能重复的可能重复的