gpt4 book ai didi

ios - 执行 sizeof(char) 时得到错误的输出

转载 作者:行者123 更新时间:2023-11-28 21:08:18 27 4
gpt4 key购买 nike

我的问题是 sizeof(char) 是 1 个字节,但是在执行下面的代码时为什么我得到错误的输出。请帮助我。谢谢

typedef struct {

int x;
int y;

char a;

}Point2D;

main() {
Point2D *myPoint=malloc(sizeof(Point2D));
NSLog(@"sizeof(Point2D): %zu", sizeof(Point2D));
}

Output: 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

最佳答案

当 (Objective-)C 编译器布局 struct 时,您不会得到“错误”的输出,它被允许使用内部填充,以便字段以最佳内存对齐方式开始类型。

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

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

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

关于ios - 执行 sizeof(char) 时得到错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627083/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com