zoukankan      html  css  js  c++  java
  • 栈为什么效率比堆高

    本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片、视频等原文的内容)

    若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cnblogs.com/wengshuhang/p/9862252.html

    栈为什么效率比堆高

    总结如下:

    1、有寄存器直接对栈进行访问(esp,ebp),而对堆访问,只能是间接寻址。

    也就是说,可以直接从地址取数据放至目标地址;使用堆时,第一步将分配的地址放到寄存器,然后取出这个地址的值,然后放到目标地址。

    2、栈中数据cpu命中率更高,满足局部性原理。

    3、栈是编译时系统自动分配空间,而堆是动态分配(运行时分配空间),所以栈的速度快。

    4、栈是先进后出的队列结构,比堆结构相对简单,分配速度大于堆。

    “堆”和“栈”并不是数据结构上的Heap跟Stack,而是程序运行中的不同内存空间。

    那么这就简单了,栈是程序启动的时候,系统分好了给你的,你自己用,系统不干预。

    堆是用的时候才向系统申请的,用完了还回去,这个申请和交还的过程开销相对就比较大了。

    栈与堆都是Java用来在Ram中存放数据的地方。

    栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)。 存在栈中的数据可以共享。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

    堆是一个运行时数据区,类的(对象从中分配空间。由于要在运行时动态分配内存,存取速度较慢。 存在栈中的数据可以共享。

    栈是编译时分配空间,而堆是动态分配(运行时分配空间),所以栈的速度快

    cpu有专门的寄存器(esp,ebp)来操作栈,堆都是使用间接寻址的。栈快点

  • 相关阅读:
    [Angularjs]$http.post与$.post
    [Bug]Unable to start process dotnet.exe
    [Node.js]Restful Api
    [Node.js]Express web框架
    [Node.js]web模块
    [Winform]使用winform制作远程桌面管理工具
    [Node.js]Domain模块
    [Asp.net web api]缓存
    [Node.js]DNS模块
    WEB传参调用EXE
  • 原文地址:https://www.cnblogs.com/wengshuhang/p/9862252.html
Copyright © 2011-2022 走看看