C++标准是否保证字符串文本完全存储在程序中 二进制文件.
Does the C++ standard guarantee that string literals are stored in the program binary unadulterated?
例如,如果你有一个程序
int main()
{
const char* str = "1111111111111111111111111111111111111111111";
printf("%s", str);
return 0;
}
并且您编译它,如果您在生成的二进制文件中搜索"1111111111111111111111111111111111111111111"(忽略编码等问题(,您是否保证找到它,或者编译器是否允许生成代码,例如,分配堆内存,使用循环用"1"填充它,然后修复对该字符串文字的所有引用以指向堆内存?(然后确保它在正确的时间被释放,等等(
我怀疑有任何实现可以真正做到这一点......但如果符合标准,会符合标准吗?
C++没有任何
"程序二进制"的概念,所以这个问题并没有真正的意义。
保证是通过递增和取消引用指针str
来获取字符串中的所有字符,即当程序运行时,您的字符串连续存储在内存中。
二进制存储不受C++标准的影响
不,标准没有说明字符串文字的存储位置和方式。这是一个实施细节。
这将取决于编译代码的计算机的编译器和体系结构。 C++标准不会影响代码以二进制格式存储的方式。
我认为编译器没有任何充分的理由这样做而不是在编译的程序中对其进行编码。
相关文章:
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 用于创建/注册虚拟存储设备的 IOKit 驱动程序
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 如果静态变量只为程序的整个部分存储了一个副本,为什么我不能使用静态变量交换 2 个数字?
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 我在一个生成随机数的程序工作,我想将这些数字存储在一个数组中
- 安卓中的Qt和应用程序数据存储
- 如何制作一个结构程序,在其中可以存储无限量的数据,以便每次您想要时都可以将另一个产品添加到列表中?
- Visual样本存储过程从C 程序执行
- QT MAC应用程序存储数据路径
- 如何制作一个为程序的每个运行中存储不同数据类型的向量
- 将大量数据从C 应用程序传递到SQLServer存储过程的最快方法是什么?
- 当分配动态内存以存储字符串副本时,程序会中断
- 为什么字符串变量"sum"不存储任何数据,程序不给出任何输出
- 如何检查程序是否超过数据类型存储
- C++ Mongocxx驱动程序存储的JavaScript问题
- 如何将JSON数组存储在Arduino程序中
- C 程序要读取包含两个双重值的Excel数据的单列,这些值由逗号分隔并存储在自己的数组中
- 应用程序使用QMAP存储对象时停止响应
- 在运行时存储程序的机器指令的位置