如何避免结构填充?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免结构填充?相关的知识,希望对你有一定的参考价值。

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

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

答案

这些技术取决于编译器。

除了可能减少程序消耗的内存量之外,其他好处通常不多。这种好处仅适用于资源较少的机器(例如内存),这意味着现代硬件很少需要它。

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

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

另一答案

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

  1. 在某些情况下,字节数组被映射到结构成员以便于访问。
另一答案

通过使用预处理程序指令可以避免结构paddding #pragma 1编译器将以一的倍数分配内存

以上是关于如何避免结构填充?的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段中填充列表视图?

在哪里以及如何使用片段填充我的标签

打包结构/避免填充

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

C 结构中的自动字段重新排序以避免填充

如何避免 FragmentManager 重新创建片段?