内存中的字符串
Strings in memory
struct Example
{
char* string;
int x;
};
当我分配Example的一个新实例时,分配8个字节(假设sizeof(char*)=4)。所以当我调用这个:
Example* sp = new Example();
sp->string = "some text";
字符串是如何分配的?是放置在一个随机的空内存位置?或者sp和成员string之间是否存在某种关系?
那么,"some text"进行动态内存分配?
像这样的字符串字量放在编译器想要放置它们的地方,它们有一个静态存储持续时间(它们持续整个程序的生命周期),并且它们永远不会在内存中移动。
编译器通常将它们存储在可执行文件本身的内存只读部分中,因此当您执行something = "some text";
时,它只是使something
指向内存中的该位置。
当你编译可执行文件时,该字符串在可执行文件中。
sp->string = "some text";
这一行只是将结构体中的指针指向该字符串。(注意:你有一个双重打字错误,它是sp
,它是一个指针,所以你需要->
)
在这种情况下,应该将常量字符串值放入程序的数据区,并且只要结构体中的指针具有该值,它将相当明确地指向该区域。用你的话来说,它被放置在一个随机的内存区域(因为它与你的结构实例去哪里无关)。
这样你首先创建了一个字符串"CONSTANT",它留在程序的堆中(而不是堆栈),你不需要管理它(分配释放它的内存),而且它确实不能被动态释放。
相关文章:
- 将字符串存储在c++中的稳定内存中
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 字符串共享内存映射的向量
- C++将字符串传递给 C 库以进行内存管理
- 内存增加和字符串流?
- 如何从内存中读取字符串?
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- Adobe 字符串内存泄漏 - 在哪里调用外部库入口点以释放内存?
- std ::字符串内存泄漏
- C++字符串内存重用优化
- Visual C++2013 std::字符串内存泄漏
- 动态分配 C 字符串内存,无需先询问用户输入时间
- SDL_TTF 绘制 int 到字符串内存泄漏
- C++减少了字符串内存的使用
- 如何将字符串内存地址(如 "7fefe05a8")存储在 C++ 中的指针/int 变量中,以便我可以对其进行位屏蔽?
- 基本的c风格字符串内存分配
- C/ c++字符串内存分配
- 使用字符串内存
- 在字符串内存分配中可能存在内存泄漏