我只是想知道在 C 结构(C 结构定义)中打包项目(int、float、union 等)时要遵循的注意事项,这将允许编译器进一步优化它。
我想知道是否有任何应该遵循的准则,例如按照允许与单词边界对齐的顺序将项目添加到结构中。等等?
详细信息将不胜感激。
这个问题还涉及交叉编译此类 C 结构的优化策略。
如果您确实想最小化空间,请按从最大对齐到最小对齐的顺序排列。这应该可以保证你得到最小的填充。
如果您可以在 gcc 下编译代码,您也许可以使用 pahole 查找可以改进的结构,并自动重新打包它们。
这里有几篇关于 pahole 的文章可能对您有帮助:
您的项目有什么要求?你会有多少个元素?什么样的结构?
例如,如果您有包含多个元素的结构体,并且需要遍历这些元素的数组来搜索某些内容,那么最好不要使用结构体数组,而是使用数组结构体。这是因为经常使用的成员将并排放置,因此缓存可以正常工作。
如果您想利用 SIMD(向量)运算,您应该按某些边界对齐所有成员。
很难提出正确的建议,因为我不知道你对数据有何期望。