将objective-C应用程序切换到x86_64,sizeof返回错误结果
所以我有一个结构,我通常只做sizeof(mystruct),当为x86编译时,它会返回0x2C,但当我将编译器切换到x86_64时,它告诉我大小是0x30,这对我来说毫无意义 以下是结构:将objective-C应用程序切换到x86_64,sizeof返回错误结果,objective-c,c,sizeof,Objective C,C,Sizeof,所以我有一个结构,我通常只做sizeof(mystruct),当为x86编译时,它会返回0x2C,但当我将编译器切换到x86_64时,它告诉我大小是0x30,这对我来说毫无意义 以下是结构: typedef struct Struct { int32_t unk1; // 0x0 int32_t unk2; // 0x4 int32_t unk3; // 0x8 int32_t unk4; // 0xC i
typedef struct Struct
{
int32_t unk1; // 0x0
int32_t unk2; // 0x4
int32_t unk3; // 0x8
int32_t unk4; // 0xC
int64_t guid; // 0x10
int32_t entryID; // 0x18
int32_t bytes; // 0x1C
int32_t duration; // 0x20
int32_t expiration; // 0x24
int32_t unk5; // 0x28
} Struct;
然后我会:
Struct mystruct;
NSLog(@"0x%X", sizeof(mystruct));
它正在打印0x30,但它不应该是0x2C吗?我不知道我的问题在哪里
谢谢 这是为了确保您的类型的阵列与您的体系结构正确对齐。如果您有一个数组:
Struct myarray[2];
然后,每个元素在x86上需要4字节对齐,但在x86-64上需要8字节对齐。为了保证这一点,总结构大小必须是8字节的倍数,因此编译器会在末尾添加额外的填充