栈、堆、进程堆

通常说的变量在栈中申请,指的线程栈,默认1M空间。

通常说的变量在堆中申请(new),指的是CRT堆。

进程堆是另一种堆,需要使用WinAPI 来创建、销毁、申请、回收。其中进程默认堆主要用来执行WinAPI时做字符串转换工作使用。用户自创建堆方便用来管理同类变量,等。(详见核心编程第十八章)

### 进程的作用及区别 #### 的作用 是一种后进先出(LIFO, Last In First Out)的数据结构,主要用于管理函数调用过程中临时变量的存储。当一个函数被调用时,其所需的空间会被分配到上,包括局部变量、返回地址和其他控制信息。这些数据会在函数结束时自动释放。由于的操作效率高且实现简单,因此常用于短期使用的数据存储。 在实际应用中,可用于字符匹配、数据反转等场景[^1]。此外,还在函数调用链路管理和表达式求值等领域发挥重要作用[^2]。 #### 的作用 是一个动态内存区域,允许程序员手动申请和释放内存空间。相比于上的内存分配更加灵活,适合生命周期较长的对象或不确定大小的数据结构。然而,这种灵活性也带来了额外的开销——需要显式的内存管理来防止泄漏或其他错误。 对于操作系统来说,的大小受到可用虚拟内存总量的影响,并且具体布局会因平台不同而有所差异。例如,在Linux环境下,整个用户态可寻址范围大约为3GB (从虚拟地址 `0x00000000` 至 `0xBFFFFFFF`) ,其中一部分保留给内核使用[^3]。 #### 主要区别 | 特性 | | | |--------------|-----------------------------|------------------------------| | **分配方式** | 自动 | 手动 | | **访问速度** | 较快 | 较慢 | | **容量限制** | 小(取决于线程/进程设置) | 大(受制于系统剩余虚拟内存) | | **生存周期** | 函数范围内有效 | 明确销毁前一直存在 | #### 使用场景总结 - ****: 更适用于那些生命期短的小型对象或者固定尺寸数组;典型例子有递归算法中的参数传递与中间计算结果保存。 - ****: 当面对复杂需求比如构建大型容器类实例或是跨多个方法共享某些资源的时候,则更适合采用区来进行持久化储存. ```c++ #include <iostream> using namespace std; int main() { int stackVar; // 定义在上的整数 int* heapVar = new int(); // 动态分配在上的整数 *heapVar = 10; cout << "Stack variable value: " << stackVar << endl; cout << "Heap variable value: " << *heapVar << endl; delete heapVar; // 记得清理内存 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值