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