数据结构上的堆栈、操作系统上的堆栈,汇编语言上的堆栈、还有C语言本身的堆栈
1.如果把c语言编译链接成汇编语言(其实准确说是机器指令),那么c语言里所用的栈就是汇编语言所用的栈大数据堆栈,他们两个完全是一个东西。
2.汇编语言(或者说纯
先抛开堆不说,只说栈: 1.如果把c语言编译链接成汇编语言(其实准确说是机器指令),那么c语言里所用的栈就是汇编语言所用的栈大数据堆栈,他们两个完全是一个东西。 2.汇编语言(或者说纯机器指令)所用的栈,其实就是操作系统所用的栈,也是同一个东西。 反过来说(linux2.4内核为例,别的不了解): 1.操作系统给每个进程都虚拟出4GB大小的内存,前3GB给你的程序用,其中一部分作为你程序的栈。后1GB操作系统自己用,也有一小部分作为系统的栈。 2.给你程序用的那部分栈,就被c语言利用起来,你平常用c语言编写的程序,函数调用时用的栈,就是这个东西。 再来说堆(还是linux2.4内核……知识有限…只看过这个): 1.之前说操作系统把3GB虚拟的内存给你的程序用,最简单的情况下,这3GB的最前面是你程序编译链接后的指令,最后面就是栈,它从后往前延伸。而中间那部分就被用作堆,是从你程序指令所占内存结尾开始往后延伸。 2.c程序先从操作系统的堆里面要,比如一次要了10MB,c程序自己管理这些内存,你malloc的时候c程序就从这10MB里分配给你,等不够用的时候,就再和操作系统要。malloc和free这两个库函数负责管理这块空间,你要多少就给多少,还要保证每次分配出去的那块都得是连续的,个就叫做堆了。 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |