7

例如,如果您有一个程序

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

    return 0;
}

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

我怀疑是否有任何实现实际上可以做到这一点......但如果这样做的话,它会符合标准吗?

4

5 回答 5

10

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

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

于 2013-10-10T18:46:46.140 回答
3

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

于 2013-10-10T18:48:48.623 回答
1

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

于 2013-10-10T18:47:55.283 回答
1

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

于 2013-10-10T18:47:21.327 回答
0

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

于 2013-10-10T18:47:20.943 回答