#define或char*字符串在哪里驻留在内存中?

Mar*_*Mao 3 c++ string

可能重复:
是否在静态内存中创建了c ++中的字符串文字?

如果我做的:
const char* StringPtr = "string0",
那么它在内存肯定某个地方,我可以得到的地址StringPtr.

但如果我这样做
#define STRING0 "string0",那么STRING0居住在哪里?
或者,STRING0因为编译器替换使用STRING0by 而不存在于内存中"string0"

据我所知,无论何时在代码中编写任何字符串,编译器都必须将其放在内存中,但我不知道它的确切行为.
但我对此并不十分肯定.

任何人都可以解释编译器如何处理#define-ed或声明的字符串char*

还有哪一个更好?到#define,extern const char*extern const std::string在字符串的头文件

谢谢!

Pot*_*ter 5

几乎在所有情况下,都允许编译器将字符串文字放在任何需要的位置.文字出现在源代码中的每次可能有一个副本,或者在实例之间共享一个主副本.

这在C中有时会引起麻烦,const这并不意味着同样的事情,你可以修改内存.在一个平台上,所有相同的字符串都会更改,而在另一个平台上,不会传播.从C++ 11开始,字符串文字不会隐含地丢失,const而且更难以犯错误.

字符串将在程序启动之前全部初始化,因此它们实际上是可执行二进制映像的一部分.这是肯定的.

不同的是:

const char StringPtr[] = "string0",
Run Code Online (Sandbox Code Playgroud)

这定义了具有唯一地址的专用数组对象.