gpt4 book ai didi

c++ - 最佳实践 - 合并多个翻译单元中的重复文本文字

转载 作者:太空狗 更新时间:2023-10-29 21:37:19 25 4
gpt4 key购买 nike

我们公司的静态分析工具指出存在重复的字符串(文本文字)。问题是它们分布在许多翻译单元(源文件)中。

例如,字符串“NULL console pointer”在module_a.c中存在1次,在module_b.c中存在5次,在module_f.c中存在1次。

我们也有编码指南,声明没有全局变量。

我们希望头文件中没有变量。

我们的平台是一个嵌入式系统,因此合并常量文本将为其他用途提供空间(并使程序加载速度更快)。换句话说,文本文字应该只有一个实例。

那么,什么是跨多个翻译单元整合常量文本文字的有效设计或架构?

是否有重复不值得合并的长度限制(例如字符串"\r\n"

我们更喜欢性能高效的解决方案,例如更喜欢直接访问而不是调用 getter 函数。

(注意:此时文字不需要翻译成多种语言。)

语言:C 和 C++(代码库是 C 语言多于 C++)。
处理器:ARM Cortex A8
平台:嵌入式系统,安全、质量和性能至关重要(医疗设备)。
编译器:IAR Embedded Workbench(用于 ARM 处理器)。

编辑 1:链接器未合并
我扫描了 BIN 文件,它确实包含多个“NULL 控制台指针”实例。

链接器有“合并重复部分”选项,我检查过了。二进制文件仍然包含重复项。

最佳答案

如果只关心字符串字面量,则您不需要更改代码。

您需要做的是研究如何在您的编译器上启用字符串池。这是一个优化器选项,它会在整个程序中寻找相同的字符串文字。如果它发现相同的文字被使用了两次,它将把它们都分配到相同的内存地址。这应该跨多个翻译单元工作。

(在 GCC 中这叫做 -fmerge-constants。我不知道在 IAR 中它叫什么。)

关于c++ - 最佳实践 - 合并多个翻译单元中的重复文本文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37973363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com