内存中的字符串

时间:2011-09-11 14:01:53

标签: c++ memory

struct Example
{
     char* string;
     int x;
};

当我分配示例8的新实例时,分配字节(假设sizeof(char *)= 4)。所以,当我这样称呼时:

Example* sp = new Example();
sp->string = "some text";

如何分配字符串?是放在一个随机的空记忆位置?或 sp 与成员 字符串 之间存在某种关系?

那么,“some text”会进行动态内存分配吗?

4 个答案:

答案 0 :(得分:6)

像这样的字符串文字被放在编译器想要放置它们的任何地方,它们具有静态存储持续时间(它们持续整个程序的生命周期),并且它们永远不会在内存中移动。

编译器通常将它们存储在可执行文件本身的只读部分内存中,因此当你执行something = "some text";时,它只会使something指向内存中的该位置。

答案 1 :(得分:3)

编译时,字符串在可执行文件中。

sp->string = "some text";

这一行只是将struct中的指针设置为该字符串。 (注意:你有一个双重错误,它是sp,它是一个指针,所以你需要->

答案 2 :(得分:1)

在这种情况下,应该将常量字符串值放入程序的数据区域,并且只要结果具有值,结构中的指针就会明确指向该区域。用你的话来说,它放在一个随机的内存区域(因为它与你的struct实例的去向无关)。

答案 3 :(得分:1)

这样你首先创建一个字符串“CONSTANT”,它保留在程序的堆中(但不是堆栈),你不需要管理它(分配释放它的内存),并且它不能动态释放。