const char*变量二次赋值后原字符串"Hello World!"是否会被内存清除?
问题解答
首先给出你提到的代码(补充了语法必要的分号):
const char* str = "Hello World!"; str = "HELLO!";
结论
字符串"Hello World!"会继续保留在内存中,不会被抹去。
原因说明
- C语言中双引号包裹的内容属于字符串字面量,编译器默认会将这类数据存放在进程地址空间的只读数据段(.rodata段),这部分内存的生命周期和程序运行周期完全一致,程序运行过程中不会被主动释放、修改或抹去。
- 代码中的
const char* str只是一个存储内存地址的指针变量:第一行代码是把"Hello World!"的首地址赋值给str,第二行代码是把另一个字符串字面量"HELLO!"的首地址赋值给str,整个过程只是修改了指针变量本身存储的地址值,不会对两个字符串字面量本身所在的内存产生任何影响。 - 即使后续没有任何指针指向
"Hello World!"的首地址,这块内存也会一直保留,直到程序完全退出后,操作系统才会回收整个进程占用的所有内存资源。
内容的提问来源于stack exchange,提问作者Bonnate
相关产品推荐
相关产品推荐

