首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pragma (1)或__attribute__ ((aligned (1)正常工作

pragma (1)或__attribute__ ((aligned (1)正常工作
EN

Stack Overflow用户
提问于 2012-04-29 18:07:40
回答 1查看 14.6K关注 0票数 18

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

代码语言:javascript
复制
#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);

我试过了,但没有成功

代码语言:javascript
复制
#pragma pack(push, 1)
/* struct ChunkStruct { ... }; */
#pragma pack(pop)

我也尝试过以下方法,但没有成功

代码语言:javascript
复制
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)));

如何用Xcode4.3.1打包结构?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-29 18:11:36

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

代码语言:javascript
复制
struct foo {
  uint8_t bar;
  uint8_t baz;
} __attribute__((packed));

使用__attribute__((aligned(1)))会告诉编译器从下一个字节边界开始每个结构元素,但不会告诉它最后可以放多少空间。这意味着编译器可以将struct向上舍入到机器字大小的倍数,以便更好地在数组和类似的应用中使用。__attribute__((packed))告诉编译器根本不要使用任何填充,即使在struct的末尾也是如此。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10371296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档