C ++标准是否保证字符串文字存储在程序二进制文件中?

时间:2013-10-10 18:41:15

标签: c++ standards

例如,如果你有一个程序

int main()
{
    const char* str = "1111111111111111111111111111111111111111111";
    printf("%s", str);

    return 0;
}

并编译它,如果您搜索生成的二进制文件“1111111111111111111111111111111111111111111”,(忽略编码等问题),您是否可以保证找到它,或者编译器是否允许生成代码,例如,分配堆内存,使用循环填充'1',然后修复对该字符串文字的所有引用以指向堆内存? (然后确保它在正确的时间被解除分配,等等)

我怀疑实际上是否有任何实现这样做......但如果它符合标准,它会不会符合标准?

5 个答案:

答案 0 :(得分:10)

C ++没有任何“程序二进制”的概念,所以这个问题确实没有意义。

保证是通过递增和解除引用指针str来获取字符串中的所有字符,即当程序运行时,您的字符串将连续存储在内存中。

答案 1 :(得分:3)

二进制存储不受C ++标准的影响

答案 2 :(得分:1)

不,标准没有说明字符串文字的存储位置和方式。这是一个实现细节。

答案 3 :(得分:1)

这将取决于编译代码的计算机的编译器和体系结构。 C ++标准不会影响代码以二进制格式存储的方式。

答案 4 :(得分:0)

我认为编译器没有任何合理的理由而不是在编译的程序中对其进行编码。