zoukankan      html  css  js  c++  java
  • 内存的那些事

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

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

    堆和栈的区别:

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

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

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

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

  • 相关阅读:
    汇编语言 第三章 寄存器
    汇编语言 第二章
    实验一 查看CPU和内存,用机器指令和汇编指令教程
    nginx的log、upstream和server
    高并发情况下Linux系统及kernel参数优化
    二进制方式安装docker(非root用户启动docker)
    redis
    redis配置文件详解
    Keepalived+LVS实现LNMP网站的高可用部署
    Nginx location相关配置说明
  • 原文地址:https://www.cnblogs.com/CCMMBN/p/9401521.html
Copyright © 2011-2022 走看看