阅读:1384回复:5
堆和栈
平时都是说堆栈,但不知道堆和栈还有区别,那位大虾能给小弟上一课?
|
|
沙发#
发布于:2002-12-15 18:59
不错,学到新东东
|
|
板凳#
发布于:2002-12-14 23:28
static类型的变量不在本中分配 应该是:static类型的变量不在栈中分配 版主用五笔时少打了一个字母 |
|
|
地板#
发布于:2002-12-14 20:03
谢了先,但还有一点不明:
static类型的变量不在本中分配?????? |
|
地下室#
发布于:2002-12-14 14:33
int i=20; int *intarray = new int(i); :) |
|
|
5楼#
发布于:2002-12-14 13:24
堆是Heap, 栈是Stack,两者是截然不同的,平时所予的堆栈,一般指Stack,而非指Heap.
简单地描述一下,Heap是一种公共内存,任何人都可以分配和访问,但是栈却不一定。栈分全局和局部,在一个函数内部声明的非堆内存即是局部栈,其它函数不能访问,且只要退出该函数,该内存块即自动释放。全局栈一般是操作系统使用,用户态程序也不宜访问。 举个例子来予 void textheapstack() { int i=20; int iarray[20]; int intarray[] = new int(i); static int j; } 在这个简单的函数中就体现了上述概念。 i是局部变量,所以有栈中分配,分配多少个字节得视操作系统而定,如果是16位的OS,则分配两个字节,如果是32的机型(NT),则分配4个字节。 iarray也是局部内存,系统在截栈中分配了20个整型变量的空间,且在函数提出时自动释放(通过调节堆栈指针ESP)。 intarray则不是在栈中分配了,而是在堆中分配,且这块内存直到你显式地调用了delete操作符释放其之前,它一直有效。 static类型的变量不在本中分配,虽然它也是在函数内部分配,但是如果再一次执行这个函数,j值为前一退出该函数时的值。这段内存直到程序退出才释放。 |
|
|