加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数据结构上的堆栈、操作系统上的堆栈,汇编语言上的堆栈、还有C语言本身的堆栈

发布时间:2022-11-06 16:00:52 所属栏目:大数据 来源:互联网
导读: 先抛开堆不说,只说栈:
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这两个库函数负责管理这块空间,你要多少就给多少,还要保证每次分配出去的那块都得是连续的,个就叫做堆了。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!