我的问题是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 必须处理没有最佳存储对齐的值,因此对字段的访问可能会变慢。