• 内存的那些事


    堆(heap)  为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;  程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。  堆中所有的的东西都是匿名的----不能按名字直接访问只能通过指针间接的访问  

    栈(stack)  为程序保存的一块内存区域,用来保存状态数据,  例如:过程或函数的地址,参数,有时候还包括局部变量。   所以,堆和栈的区别:一个是动态,一个是静态;  堆是在程序运行时动态分配的,而栈的分配是编译完后,就确定了;  栈内存的回收,系统自动进行了,而堆上分配的内存,需要手工显式回收。   malloc , new分配的内存就是在堆上的,如果不用free, delete回收,  就会造成内存泄漏(垃圾),不过,一般操作系统会在整个程序(进程)退出时,  回收分配给这个进程的内存等资源。

    堆和栈的区别:

    (1)操作系统方面区别:

    在使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

    (2)数据结构方面区别:

    还有就是数据结构方面的堆和栈,这些都是不同的概念。这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际上就是满足先进后出的性质的数学或数据结构。虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因。

  • 相关阅读:
    标识符
    Bootstrap笔记——Checkbox选项组
    servlet实现简单验证码
    javascript笔记——登录表单验证
    JSP的隐式对象(page,config,pageContext,exception)
    创建Servlet文件不自动生成web.xml原因
    JSP的隐式对象(application)
    前端开发工具——brackets的使用
    《Shell脚本学习 —— Shell变量、字符串、数组、注释》
    《开发板 — 3399pro备份整个文件系统》
  • 原文地址:https://www.cnblogs.com/CCMMBN/p/9401521.html
Copyright © 2020-2023  润新知