C++ 内存中的字符串

C++ 内存中的字符串,c++,memory,C++,Memory,当我分配示例的一个新实例时,会分配8个字节(假设sizeof(char*)=4)。所以当我称之为: struct Example { char* string; int x; }; 字符串是如何分配的?是否放置在随机的空内存位置?或者sp和成员字符串之间是否存在某种关系 因此,“某些文本”会进行动态内存分配?像这样的字符串文本会放在编译器想放在的任何地方,它们有一个静态存储持续时间(它们持续整个程序的生命周期),并且它们不会在内存中移动 编译器通常将它们存储在可执行文件本身

当我分配示例的一个新实例时,会分配8个字节(假设sizeof(char*)=4)。所以当我称之为:

struct Example
{
     char* string;
     int x;
};
字符串是如何分配的?是否放置在随机的空内存位置?或者sp和成员字符串之间是否存在某种关系


因此,“某些文本”会进行动态内存分配?

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


编译器通常将它们存储在可执行文件本身内存的只读部分中,因此当您执行
something=“some text”
它只是使
某物
指向内存中的该位置。

编译该字符串时,该字符串位于可执行文件中

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

此行只是将结构中的指针设置为该字符串。(注意:这里有一个双重输入,它是
sp
,它是一个指针,因此需要
->

在这种情况下,常量字符串值应该放在程序的数据区域中,并且结构中的指针只要有值,就会毫不含糊地指向该区域。用你的话说,它被放在一个随机的内存区域(因为它与结构实例的位置无关)。

通过这种方式,你首先创建了一个字符串“常量”,它留在程序的堆中(但不是堆栈),你不需要管理它(分配释放它的内存),而且它确实不能被动态释放。

@Roee Gavirel:在我看来,他并没有使用任何字符串类。不,它没有进行动态内存分配。你可能会发现这个相关的问题很有帮助:有没有人觉得加夫里尔可能不知道他/她在说什么?无意冒犯。在本例中,您确实应该使用
const char*
。编写的代码使用了从
const char[10]
char*
的不推荐的转换,中途丢弃了
const
sp->string = "some text";