栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。
所以,按你说的,需要的工具可能就是编译器(静态分配)和alloca函数(动态分配)这两种进行操作清除栈内存中废弃的数据的。对于alloca函数来说(详细请百度),内部会定义一种操作,就是当栈内存中的某些数据用完后,会自动清除的。这可能就是自动清除的原因吧。
需要明确的一点是:栈内存中是以队列方式进栈和出栈的,堆和栈在一定程度上是一样的,驻留长规内存中,堆栈指针下移建立新的内存,上移释放内存。这里是用某种意义上的指针进行操作的。对于一个变量,在栈内存中使用完了,这个指针会进行向上移动,也就是将其清除。 |