如何避免结构填充?

时间:2015-02-05 09:51:57

标签: c memory-management structure padding

我很想知道#pragma如何帮助避免结构填充(请给我一个程序来理解它)。

默认情况下,编译器将以对齐的方式分配内存。因此,通过避免结构填充,将会有什么好处的程序员? 什么时候需要避免结构填充?

3 个答案:

答案 0 :(得分:2)

技术取决于编译器。

除了可能减少程序消耗的内存量之外,其他好处通常不多。只有在资源很少的机器(例如内存)上,这种好处才有价值,这意味着现代硬件很少需要它。

实际上,成本会降低性能或硬件异常。填充的常见目的是通过以适合主机系统的方式对齐struct成员来提高性能并避免硬件异常。禁用填充基本上会关闭填充的所有好处。

保存几个字节,甚至几千字节,在性能或更多错误条件方面很少受到影响。如果您正在进行某些类型的开发(例如,在资源有限的嵌入式系统上),那么它可能是值得的,但即便如此也并非总是如此。

答案 1 :(得分:1)

1.主要在资源关键的嵌入式系统的情况下避免使用结构填充。在这种情况下,通过以代码存储器为代价打包结构成员来保存RAM(需要更多指令来访问打包的结构成员)。

  1. 在某些情况下,为了便于访问,将一个字节数组映射到结构成员。

答案 2 :(得分:1)

使用预处理程序指令#pragma 1可以避免

结构paddding 编译器将以一个

的倍数分配内存