c - 32 位系统中的结构填充

标签 c struct padding

如果有一个像这样的C结构

struct abc
{
uint16_t                    port_no; //2 Bytes
uint8_t                     src_mac[6]; //6 Bytes
}

编译器如何应用填充来对齐 32 位系统上的 4 字节字:

会吗

2 Bytes
Pad[2]
6 Bytes
Pad[2]

2 Byte
6 Byte

最佳答案

这取决于系统的架构。

在 32 位 MIPS 上,您的结构不会有 无论如何填充,因为 uint16_t 必须对齐 甚至地址和 uint8_t 也根本不需要对齐。

然而,struct abc 类型的变量将在 甚至地址,从而最终强制填充到外部 struct(例如,当 struct abc 是周围结构的成员时)。

关于c - 32 位系统中的结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51376721/

相关文章:

c - 将带空格的句子扫描到 C 中的 *char 数组中

c++ - 如何为我的 visual studio 2010 c++ 应用程序制作自动更新程序?

go - 动态初始化结构

java - 在 java 中填充数字直到字符串长度为 8 个字符?

c - char值如何存储在内存中?对于小端和大端?

c - 选择数组中的范围,C

if-statement - Golang 模板变量 isset

c++ - 如何为具有共享指针的结构的多索引制作修饰符以 boost 记录器后端以重置此后端?

css - 填充和边距有什么区别?

css - bootstrap 是否有内置的 padding 和 margin 类?