很早就想写一篇文章,关于操作系统中的堆栈。
说是堆栈,其实就是操作系统如何处理代码的,即如何为代码中的各种类型的变量、常量、方法体(函数体)等等分配内存空间。
了解这些内容,可以帮助我们做一些判断:
- 帮助我们在程序出错时更快找到错误地点。
- 帮助们尽可能利用效率高的方式编程。
接下来开始浅析操作系统中的堆栈。
堆:由程序员申请的一片数据区域,并在程序执行完之前由程序员手动释放。类似于链表结构。
栈:由操作系统自动分配的区域,在程序结束后自动回收。类似于栈结构。
上面只是给出了简单的理解,但是很模糊。翻译一下上面两句话,就是:行如C/C++中的malloc,new,delete,free这些关键字,对这些关键字声明的内容来说,这些内容存储在堆中;而行如一个函数中的局部变量,则是存储在栈中的。
这就是堆栈中最基础的东西。
给出一段简单的代码:
#include <iostream>
using namespace std;
void s_swap(int &a, int &b){ //形参放在栈中
int c; //函数体中声明的变量放在栈中
c = a;
a = b;
b = c;
}
int main(){
int a = 6; //函数体中声明的变量放在栈中
int