在我初学c语言的时候就对堆栈和堆感到很迷惑了,感觉这个东西很抽象,以为堆栈就是堆和栈。

之所以会混淆堆栈和堆,是因为这是从中文进行理解的,如果是看英文就不会了。

堆栈的英文是stack,堆的英文是heap。

stack包括一个进程的执行栈,其中包括了程序的局部变量和函数的返回值,栈的长度会随着程序的进行变化。stack主要是使用PUSH POP操作的,黑客可以利用缓冲区溢出修改函数的返回地址,让这个地址指向自己想执行的函数,就可以控制这个系统了;不过目前的系统对缓冲区溢出的保护都加强了,已经不是那么容易攻击的了。

heap也叫数据段(data segment),包含一个进程的动态内存空间。heap是可以写的,而且他的大小也是可以变化的。可以通过alloc的一系列函数对heap空间进行分配,像malloc calloc等。

参考源