Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将objective-C应用程序切换到x86_64,sizeof返回错误结果_Objective C_C_Sizeof - Fatal编程技术网

将objective-C应用程序切换到x86_64,sizeof返回错误结果

将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

所以我有一个结构,我通常只做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

    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字节的倍数,因此编译器会在末尾添加额外的填充