Skip to content

栈的位置与作用

约 496 字大约 2 分钟

底层原理计算机基础

2025-06-03

栈空间(stack)实际存在于计算机的 内存(RAM) 中,具体来说

  1. 物理位置

    • 栈和堆都使用电脑的内存条(16GB的那个物理硬件)
    • 不是CPU缓存或硬盘等其它部件
  2. 内存中的组织方式

    • 传统布局中,栈通常位于内存地址空间的"高端"(高地址),向低地址增长
    • 堆位于内存的"低端"(低地址),向高地址增长
    • 现代操作系统有更复杂的内存管理方式
  3. 与CPU的密切配合

    • CPU通过专门的寄存器(如x86的ESP/RSP)跟踪当前栈顶位置
    • 每次函数调用/返回时,CPU自动调整栈指针
  4. 虚拟内存机制

    • 实际物理位置由操作系统通过页表管理
    • 程序看到的是虚拟地址空间中的栈区域
  5. 性能影响

    • 由于栈在RAM中,其访问速度比CPU缓存慢
    • 但比访问硬盘(虚拟内存交换时)快几个数量级

简单说:当你买16GB内存条时,其中的一小部分(默认约1-8MB)会被用作主线程的栈空间,其余大部分空间可用于堆分配和其他用途。

  1. Windows/Linux默认栈大小

    • 通常主线程栈大小约1-8MB (Windows默认1MB,Linux默认8MB)
    • 每个新线程的栈大小可以通过线程创建参数配置
  2. Rust中的栈大小

    • 主线程使用系统默认栈大小

    • 通过std::thread::Builder可以自定义新线程栈大小:

      std::thread::Builder::new().stack_size(4 * 1024 * 1024) // 4MB
  3. 与总内存(16GB)的关系

    • 栈大小独立于系统总内存
    • 16GB内存可以支持更多/更大的栈,但单个栈大小仍受上述默认限制
    • 实际可用栈空间不会因为总内存大而自动增加