我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 栈地址 >

什么是堆和栈?函数压栈是怎么回事?

归档日期:07-23       文本归类:栈地址      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

  2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

  3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

  显然要调用这个函数,你应当先把b值push进stack,然后再push a

  所以C在调用这个函数sub时,必须要压栈(即传入参数)但这些工作,在C语言里,并不需要你来完成.你只要写出

  cdecall 由调用者清除堆栈 C的默认函数调用方式 所以这样C支持可变参数

  fastcall 是把函数参数列表的前三个参数放入寄存器eax,edx,ecx,其他参数压栈

  stack的特点是先入后出 就像叠盘子 先放上去的盘子后拿走(底里的抽不出来自然最后才能拿走)

  stack和heap放在一起讨论的话 其实不是讲的数据结构了 是说操作系统给程序分配内存的方式

  对于一个程序来说 运行的时候 系统分配了一定内存给它 其中一块叫堆 一块叫栈

  堆里面主要放 动态分配的内容 比如c里面用 malloc 分配到的空间 就在堆里 c++里面用new 分配到的也在堆里

  一个函数的局部变量 会在这个函数被调用时push到栈里 这个函数返回的时候才从栈里面pop出来

本文链接:http://apawoodbury.com/zhandizhi/343.html