gpt4 book ai didi

xcode4 - pragma pack(1)或__attribute__((aligned(1)))都有效

转载 作者:行者123 更新时间:2023-12-01 09:56:37 25 4
gpt4 key购买 nike

我的代码过去曾经可以工作,但是现在结构大小突然变成了16个字节。它曾经是13个字节。我最近从Xcode 4.2升级到Xcode 4.3.1(4E1019)。

#pragma pack(1)
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
};
#pragma pack()
STATIC_ASSERT(expected_13bytes, sizeof(struct ChunkStruct) == 13);

我尝试使用失败
#pragma pack(push, 1)
/* struct ChunkStruct { ... }; */
#pragma pack(pop)

我也尝试了以下方法,但是没有运气
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
} __attribute__ ((aligned (1)));

如何使用Xcode 4.3.1打包结构?

最佳答案

Xcode使用gccclang编译器,它们都使用__attribute__((packed))来指定结构打包。

struct foo {
uint8_t bar;
uint8_t baz;
} __attribute__((packed));

使用 __attribute__((aligned(1)))告诉编译器在下一个字节边界开始每个struct元素,但没有告诉它在末尾可以放置多少空间。这意味着允许编译器将 struct舍入为机器字大小的倍数,以便更好地用于数组和类似内容中。 __attribute__((packed))告诉编译器甚至在 struct的末尾根本不使用任何填充。

关于xcode4 - pragma pack(1)或__attribute__((aligned(1)))都有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371296/

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