我们如何强制编译器没有结构填充?请解释

Posted

技术标签:

【中文标题】我们如何强制编译器没有结构填充?请解释【英文标题】:How do we force compiler not to have structure padding? Please explain 【发布时间】:2016-01-10 06:48:50 【问题描述】:

一下。

【问题讨论】:

使用packed属性,见类似:***.com/questions/5473189/… 【参考方案1】:

What is a "packed" structure in C? 的帖子介绍了如何在使用 gcc 时避免填充。

struct foo __attribute__((__packed__)) 

   ...
;

clang 的方法相同。见How to declare packed struct (without padding) for LLVM?。

Locally disable padding 的帖子介绍了如何在使用 MS Visual Studio 时避免填充。

#pragma pack(push, 1)
struct foo
 
   ...
;
#pragma pack(pop)

【讨论】:

以上是关于我们如何强制编译器没有结构填充?请解释的主要内容,如果未能解决你的问题,请参考以下文章

如何避免结构填充?

编译时检查以确保结构中的任何地方都没有填充

64位机器上的结构填充

constexpr 和使用重新解释强制转换的静态 const void 指针的初始化,哪个编译器是正确的?

如何强制编译器显示隐式构造函数

interpreter(解释器模式)