我的问题是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
答案 0 :(得分:2)
你没有得到错误"输出,当(Objective-)C编译器列出struct
时,允许使用内部填充,以便字段从其类型的最佳内存对齐开始。
如果您需要struct
的大小恰好是其字段大小的总和,则可以使用__attribute__((__packed__))
。 E.g:
typedef struct
{
int x;
int y;
char a;
} __attribute__((__packed__)) Point2D;
的大小为9
。但是,由于CPU必须处理没有最佳存储对齐的值,因此对字段的访问可能会变慢。