6

可能重复:
C++ 中的字符串文字是在静态内存中创建的吗?
C++ 字符串字面量数据类型存储

在这段代码中:

const char * str = "hello world";

如果我理解正确,指针是 4 或 8 个字节,我猜它会分配在堆栈上。但是“hello world”的内存分配和存储在哪里呢?
或者具体str指的是什么?

4

3 回答 3

16

它没有分配。它通常存储在程序的代码段或堆栈中,这取决于编译器。无论哪种方式,它都指向一个以空字符结尾的字符数组。

于 2013-01-22T21:54:22.630 回答
6

本质上,它的编译就像您编写的那样:

const static char helloworld[12] 
             = {'h', 'e', 'l', 'l', 'o',' ','w', 'o', 'r', 'l', 'd', '\0'};

const char * str = helloworld;

该数组通常会放置在内存的某个只读部分中,可能靠近可执行代码。

根据定义的位置,str 将位于堆栈或全局内存空间中。

于 2013-01-22T22:06:21.990 回答
6

C 没有堆栈或堆。C 说这"hello world"是一个字符串文字,并且字符串文字具有静态存储持续时间

于 2013-01-22T21:53:36.757 回答