编译器如何管理相同的字符
How the compiler manages the same char?
我想知道编译器(我使用的是VS 2015)是否也会优化,如果它在检查代码时找到相同的字符?
例:
wstrFile.find_last_of(L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
wstrFile.find_last_of(L"aefgh");
"aefgh"(使用两次)仅在程序启动时在某个地方存储一次?
否则,将它们存储在变量中以获得(一点点)空间是否有用?(在所有情况下,我将进一步使用此变量)
允许实现使L"abcdef"
和L"abcdef"
具有相同的地址,但不可能使L"cd"
指向该文本的中间字符,因为文本必须以 NULL 字符结尾,并且在原始字符串中的该位置不存在 NULL 字符。
内存非常紧张的用例确实存在,但我想说的是,总的来说,你需要关心这个问题的可能性微乎其微。
不,永远不会。
默认和通常的行为是,如果您定义任何类型的常量对象(字符串、数组等),那么编译器将至少在某处分配该数量的存储,并按照定义设置内容。存储通常会在某种边界上分配,因此通常会浪费几个字节作为填充。
某些编译器可以选择分配单个字符串或其他常量对象,即使您多次声明它,但仅在完整对象级别,绝不(如您所要求的那样)字符串中的单个字符。
大多数优化旨在使程序运行得更快,也许是以牺牲更多内存为代价的。节省几字节存储的策略没有值得的回报,也没有被追求。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 当vector是tje全局变量时,c++中vector的内存管理
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 字符 * 未从重载运算符或内存管理问题正确返回
- 编译器如何管理相同的字符
- 在现实生活中管理字符
- 如何管理从c++到记事本的重音字符