首先,毫无疑问,即使是常量(字符串常量)也是要占据空间的。
一般来说,基本类型(整型、字符型等)常量会在编译阶段被编译成立即数,占的是代码段的内存。(代码段是只读的,而且不允程序员获取代码段的地址,所以在c++中,尽量不为const分配数据段的内存,但是一旦取cosnt的地址,就不得不分配了,但是读const的时候,依然是从代码段读取那个立即数)。当然,占代码段的内存一般不在我们常说的“占内存”范围中。
而字符串常量或基本类型的常量数组占用的是数据段内存。
程序中但凡出现“XXX”形式,这都是代表字符串常量,是要事先存储在程序的只读数据区的。
void test(){
char name[32] = "hello,world"; // "hello,workd" 存储在程序的只读数据区, name 存储在test函数的栈区。
}
其实是有两份存在的。
string name = "hello,world";同样是存在两份的,与char name[32]的区别在于: string的变量即对象,本身是在栈区,此栈区中有个指针变量,指向堆区(动态内存分配),此堆区正是用来复制接收存储在只读数据区的字符串常量的。
char name[] = {'r', 'd', 'n',‘\0’};这种写法则只存一份。
标签:存储,常量,代码段,内存,字符串,name From: https://www.cnblogs.com/ylww/p/16830155.html