我的源代码中有很多文字字符串,除了前导空格之外都是相同的(由于希望保持正确的缩进)。编译器是否足够聪明,可以看到它可以在内存中重用两个空间,只需将一个字符串偏移几个字节?
答案 0 :(得分:1)
ISO c99 6.5.2.5复合文字
83)这允许实现共享字符串文字和常量复合文字的存储,具有相同或重叠的表示。
答案 1 :(得分:1)
简短回答:可能。
答案很长:这取决于实施情况。通常,C编译器具有称为“字符串池”或类似的优化器功能,这使编译器能够将所有字符串文字相邻地存储在ROM中。
然后可以优化该字符串池的内容,出现两次的相同字符串几乎肯定会被优化掉。我认为大多数编译器也足够智能识别子字符串。但也存在平台考虑因素,例如对齐,因此只是因为存在子字符串,并不一定意味着重用该内存位置最有效。
C标准中没有任何内容保证完成此类优化。但与此同时,标准中没有任何内容阻止它。
可以肯定的是,您必须检查特定编译器的文档,或者反汇编程序,或检查链接器输出。
答案 2 :(得分:-4)
简单回答:不。我不知道有任何编译器这样做。