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

Does the C++ standard guarantee that string literals are stored in the program binary unadulterated?

本文关键字:存储 程序 二进制文件 文本 是否 标准 字符串 C++      更新时间:2023-10-16

例如,如果你有一个程序

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

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

我怀疑有任何实现可以真正做到这一点......但如果符合标准,会符合标准吗?

C++没有任何

"程序二进制"的概念,所以这个问题并没有真正的意义。

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

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

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

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

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

相关文章: