专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

堆栈的区别,什么是堆栈

来源:小嗨整编  作者:小嗨  发布时间:2023-02-23 03:57
摘要:堆栈的区别,什么是堆栈1、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分:栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap):一般由程序...

堆栈的区别,什么是堆栈

1、预备知识—程序的内存分配

一个由C/C++编译的程序占用的内存分为以下几个部分:
  • 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  • 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
  • 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束后由系统释放。
  • 文字常量区:常量字符串就是放在这里的。程序结束后由系统释放。
  • 程序代码区:存放函数体的二进制代码。
例子程序:

堆栈的区别,什么是堆栈

2、堆和栈的理论知识

申请方式

  • stack:
    由系统自动分配。例如,声明在函数中一个局部变量 int b; 
    系统自动在栈中为b开辟空间
  • heap: 
    需要程序员自己申请,并指明大小,在c中malloc函数 
    如p1 = (char *)malloc(10); 
    在C++中用new运算符 
    如p2 = new char[10]; 
    但是注意p1、p2本身是在栈中的。

申请后系统的响应

  • 栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
  • 堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时, 会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表 中删除,并将该结点的空间分配给程序。另外,对于大多数系统,会在这块内存空间中的 首地址处记录本次分配的大小。这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部 分重新放入空闲链表中。

本文地址:软件教程频道 https://www.eeeoo.cn/ruanjian/903303.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


软件教程
小编:小嗨整编
相关文章相关阅读
  • 什么是堆栈

    什么是堆栈

    堆栈(英语:stack)又称为栈或堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO,Last...

  • 堆栈是什么意思?

    堆栈是什么意思?

    堆栈(Stack)是一种线性的数据结构,它可以被看作一种特殊的线性表,它只能在表的一端进行插入和删除操作,即只能从栈顶(top)进行插入和删除操作。对它的操作又称为“压栈”和“弹栈”(PUSH和POP)。堆栈有许多应用,如在编程时写程序以...

  • 网页提示堆栈溢出解决方法

    网页提示堆栈溢出解决方法

      一些用户在浏览网页时浏览器弹出堆栈溢出的提示窗口,这个窗口需要手动点击关闭,为什么会遇到堆栈溢出呢?是因为计算机向缓冲区填充数据的时候数据长度超过了缓冲区的长度,就会出现堆栈溢出的提示。下面小编为大家带来网页提示堆栈溢出解决方法。一起去...

  • 摄影后期技巧之:photoshop堆栈处理

    摄影后期技巧之:photoshop堆栈处理

    摄影后期技巧之:photoshop堆栈处理操作方法01摄影其实不难——理论都很简单,主要就是经验积累的过程——只不过跟氪金游戏一样需要花不少钱。短时间烧了一遍器材后感觉玩摄影这件事其实特别折腾。既然器...

  • 堆栈式摄像头怎么样 堆栈式摄像头详细介绍

    堆栈式摄像头怎么样 堆栈式摄像头详细介绍

    自从智能手机的出现后,我们的信息世界开始了翻天覆地的变化,尤其是在照相功能上。有了智能手机之后,我们出行不用背着重重的相机,也可以随时随地的照片。而且现在各种修片软件泛滥,我们还可以随时将我们照好的照片修好,发到我们的分享平台上面去。所以...

  • 堆栈的区别,什么是堆栈

    堆栈的区别,什么是堆栈

    堆栈的区别,什么是堆栈1、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分:栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap):一般由程序...

  • Java堆栈是什么意思,java堆栈溢出怎么解决?

    Java堆栈是什么意思,java堆栈溢出怎么解决?

    Java堆栈是什么意思,java堆栈溢出怎么解决?堆和栈的概念可以说是Java开发底层的一大问题了。今天和一个复旦的哥们在讨论基本数据类型在堆栈中的存储问题,以及明白了这个问题对于用户(程序员)来说有何意义。顺便总结一下堆栈相关的知识。go...

  • 堆栈的区别是什么,C+java堆和栈的区别详解

    堆栈的区别是什么,C+java堆和栈的区别详解

    堆栈的区别是什么,C+java堆和栈的区别详解,Java堆栈对大家来说早已熟悉,但是两者之间的差别你真的知道吗?Java堆栈的区别如下:1. 堆栈的功能不同栈内存用来存储局部变量和方法调用。而堆内存用来存储Java中的对象。无论是成员变量,...

  • 周排行
  • 月排行
  • 年排行

精彩推荐