Rust 内存管理全解析
1. 内存空间基础
在程序运行时,用户空间是程序实际使用的区域,而虚拟内存的内核空间对程序不可访问。用户空间被划分为多个内存段,具体如下:
- 文本段(Text segment) :包含程序的代码以及其他只读数据,如字符串字面量和常量参数。该部分直接从程序二进制文件(可执行文件或库)加载。
- 数据段(Data segment) :存储用非零值初始化的全局变量和静态变量。
- BSS 段(BSS segment) :包含未初始化的变量。
- 堆(Heap) :用于动态内存分配。随着在堆上分配内存,进程的地址空间会不断增长,堆是向上增长的,即新的项会被添加到比之前项地址更大的位置。
- 栈(Stack) :用于存储局部变量,在某些平台架构中也用于存储函数参数。栈是向下增长的,即先放入栈中的项占用较低的地址空间。
需要注意的是,栈和堆分配在进程地址空间的两端。当栈的大小增加时,它向下增长;当堆的大小增加时,它向上增长。如果它们相遇,会发生栈溢出错误或堆上的内存分配调用失败。在栈和堆之间,是共享内存(跨进程共享的内存)、程序使用的共享库或内存映射区域(反映磁盘上文件的内存区域)所在的区域。在栈的上方,有一个段用于存储传递给程序的命令行参数和为进程设置的环境变量。
2. Rust 程序的内存布局
为了理解 Rust 如何实现低内存占用、内存安全和高性能的结合,需要了解 Rust 程序在内存中的布局以及如
超级会员免费看
订阅专栏 解锁全文
2191

被折叠的 条评论
为什么被折叠?



