什么是栈?

在计算机中,栈可以理解为一个特殊的容器,用户可以依次把数据放进去,栈可以存放形参,局部变量,局部数组等函数作用域内的数据,目的是为了完成函数的调用。

注意:栈也经常被称为堆栈,但是堆仍被叫做堆,所以堆栈这个名字只是表示栈,而不包含堆。

 

栈怎么存放数据?

栈中存放数据依据“先进后出”原则,即先放入的数据最后才能取出,后放入的数据先取出,且先放入的数据处于高地址。

 

内存中怎么确定栈的位置?

栈是一段连续的内存,计算机通过栈顶和栈底来确定栈区的位置,栈顶被esp寄存器指向,栈底被ebp寄存器指向,当数据出栈入栈时,只移动栈顶,所以数据入栈(也叫压栈(push))时,esp指向减小,当数据出栈(也叫弹出(pop))时,esp指向增大。

 

 

栈有大小吗?大小是多少?与什么有关?

对每个程序来说栈的大小一般是1m~8m,这是在编译期间就决定的,在后面程序运行期间不能更改,栈的内存与编译器有关,编译器会为栈设定一个默认的最大值(在 VC/VS 下,默认是 1M,在 C-Free 下,默认是 2M,在 Linux GCC 下,默认是 8M。),当然我们也可以自己在编译器中更改栈内存的大小。

注意:栈是对一个线程来说的,每个线程都有自己的栈,所以一个程序可以有许多个栈,并且由此严格来说,栈内存的最大值是对于线程,而不是对于程序。

 

 

栈溢出

当程序使用某个栈内存大于默认值时,就会出现栈溢出错误

 

栈区的内存管理

栈区的内存系统自动分配和释放,发生函数调用时就分配内存给函数内部数据,使用完后销毁,所以函数内部的局部变量,局部数组,局部对象等等只在函数内部有效。

 

上一篇:Mybatis实现数据增删改查(详细讲解)


下一篇:Css中用Google Fonts ,国内使用方法