Ios 执行sizeof(char)时获得错误的输出
我的问题是sizeof(char)是1字节,但在执行下面的代码时,为什么会得到错误的输出。请帮帮我。多谢各位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)
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必须处理没有最佳存储对齐的值,因此对字段的访问速度可能较慢。可能重复的可能重复的