堆和栈

来源:互联网 发布:泰妍和西卡关系知乎 编辑:程序博客网 时间:2024/04/27 06:47

最近写程序中意识到了堆栈的重要,所以上网找了下堆栈的资料,特此总结如下:

堆:我们能自己申请分配大小,如C中用malloc()函数就可以了。

栈:编译器自动为我们的程序分配,前提是有那么的内存空间满足你的程序,否则溢出。

速度上的区别:因为栈是编译器分配的,所以当然比较快。但是我们不能干预。

堆呢?当然能自己分配,用new就可以,我们能干预,方便

堆和栈中的存储内容
栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。

 bootloader的启动过程的第二步就是要设置堆栈,为我们的内核的调用提供环境!

原创粉丝点击