![]() |
1
79
gcc不会对结构的元素重新排序,因为这会违反C标准。C99标准第6.7.2.1节规定:
|
![]() |
2
28
结构经常用于表示二进制文件格式和网络协议的打包顺序。如果这样做的话,这将打破。此外,不同的编译器将以不同的方式优化事物,并且将两者的代码链接在一起是不可能的。这根本不可行。 |
![]() |
3
11
GCC在从源代码生成机器代码方面比我们大多数人都聪明;然而,如果它在重新安排结构方面比我们更聪明,我会不寒而栗,因为它是可以写入文件的数据。如果在另一个GCC决定重新安排结构成员的系统上读取以4个字符开头然后有一个4字节整数的结构,那么它将是无用的。 |
![]() |
4
7
|
![]() |
5
2
C编译器不会自动打包结构 正因为 像你提到的对齐问题。不在字边界上的访问(在大多数CPU上为32位)在x86上会带来沉重的惩罚,并在RISC体系结构上造成致命的陷阱。 |
![]() |
6
2
并不是说这是个好主意,但您当然可以编写依赖于结构成员顺序的代码。例如,作为一种黑客行为,人们通常将指向结构的指针转换为他们想要访问的某个字段的类型,然后使用指针算法到达该字段。对我来说,这是一个非常危险的想法,但我看到它被使用,特别是在C++中强制一个变量被声明为私有的,当它在一个第三方库中的一个类中被公开访问,而不是公开封装的。重新安排成员将完全打破这一局面。 |
![]() |
7
1
您可能希望尝试最新的gcc主干或正在开发中的struct reorg分支。 |
![]() |
Hatsune Miku · 比较或if语句是否更快[已关闭] 1 年前 |
![]() |
Black Swan · 无法解压缩的值太多(应为2)错误 1 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Balfar · 处理NumPy阵列上的循环最有效的方法是什么? 3 年前 |
![]() |
Daniel · C#轻松存储快速访问的大型位矩阵 7 年前 |
|
halbe · 优化音频DSP程序的numpy计算 7 年前 |
![]() |
Afsara · 是否有任何方法不能优化我们的应用程序? 7 年前 |