如果我不将预先编写的字符串保存到变量,它还在内存中吗?
If I don't save prewritten string to variable, is it still in memory?
我想知道发生了什么,如果我有这样的代码段:
std::string var1 = "Something";
"Something else";
显然我有一个名为"var1"的 std::string 类型的变量,但我不知道我没有保存到任何变量的另一个字符串是否仍在内存中的某个地方。
基本上我正在使用SQL,我有一个语句,该语句仅在创建数据库时调用一次。所以我想知道我是否应该做
const std::string query = "statement";
在头文件中的某个地方,或者只是立即使用"语句"作为参数。我更喜欢第一种方式,因为如果需要,我可以重用字符串。
我知道它只有几个字节,这并不重要,我只是想知道内存中发生了什么。
谢谢
编辑:
好的只是为了更清楚。 如果我调用方法:
sql.Execute("statement");
文字值"语句"是否在程序的整个生命周期中保存在内存中的某个位置?
文字值是表达式,是"最小"的表达式形式之一。并且所有表达式都可以用作语句(只需添加语句终止符;
)。所以靠它自己
"Something else";
是一个有效的语句。它不做任何有用的事情,除了最愚蠢的编译器之外,应该被所有人优化。
现在,如果您的代码看起来像这样
std::string var1 = "Something" // Note that there's no semicolon here
"Something else";
这将被翻译为
std::string var1 = "Something" "Something else";
这将被解析为字符串文字连接并编译为
std::string var1 = "SomethingSomething else";
至于字符串文字是否存储在内存中,是的。字符串文本存储为字符的常量数组(包括字符串 null 终止符)。
这些数组的生命周期是程序本身的生命周期,它们具有静态存储持续时间,指向这些数组元素的指针将始终有效。
另请注意,允许编译器组合字符串文本的存储。因此,如果您在多个位置使用相同的文本,则编译器只能存储字符串的单个副本。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么内存屏障依赖于变量?
- 在内存不足之前,我可以声明多少个 const 变量?
- C++具有模板成员变量的类. 和参数内存输出
- 为什么同一个变量的内存地址不同?
- 分配具有 2D 向量大小的变量的内存
- C++强制变量到一个固定的内存位置
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 释放指向保留嵌套变量内存地址的结构的指针
- C++非虚拟类成员变量内存布局?
- 在多个继承的情况下,C 编译器如何处理成员变量内存偏移
- C 全局对象变量内存释放
- C++健全性检查失败:几个变量/内存位置被更改为垃圾,即使我从未访问过它们
- gsoap 和 qt 转换变量内存句柄
- C++指针变量内存泄漏澄清
- 声明变量(内存中的精确位置)
- C++中的全局变量内存分配
- C++将常量引用分配给实例变量(内存问题?)