如何避免结构填充?

问题描述 投票:0回答:3

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

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

c memory-management structure padding
3个回答
2
投票

这些技术取决于编译器。

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

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

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


1
投票

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

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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.