当前位置: 首页 > wzjs >正文

苏州建设工程招标在哪个网站网站开发不兼容ie8

苏州建设工程招标在哪个网站,网站开发不兼容ie8,抖音代运营有什么内容,新型网站设计这篇文章我们来谈论一下计算机的内存。在这里,我们着重讨论内存的两个部分:栈与堆。我们需要注意的一点是,这两个概念不是虚拟的,而是在计算机内部真实存在的。它们是我们的CPU当中RAM部分物理上存在的两个区域。我们之所以要重点…

这篇文章我们来谈论一下计算机的内存。在这里,我们着重讨论内存的两个部分:栈与堆。我们需要注意的一点是,这两个概念不是虚拟的,而是在计算机内部真实存在的。它们是我们的CPU当中RAM部分物理上存在的两个区域。我们之所以要重点关注这两个部分,是因为我们在编程的时候,需要把我们的变量储存在这两个区域当中。

首先我们来看一下栈。栈的空间很小,通常只有2M左右,而且这部分是提前定义好了的。堆相对而言,空间更大一些,也是预定义好的,但是堆可以增长。

内存是我们存储数据的地方,而栈与堆给出的内存存储方式则是完全不同的。当然这种区分只是存储方式上的区别,而存储的数据本身是,根本上做的事情是一样的。

比如我们做一个简单的栈分配与堆分配:

int value = 5;        //栈分配
int* hvalue = new int;     //堆分配
*hvalue = 5;

同样的我们也可以做栈/堆分配数组:

int value[5];             //栈分配
int* hvalue = new int[5]; //堆分配

我们可以看到,在堆分配内存的时候,我们需要使用new关键字来进行。

进入到内存中,我们可以看到栈分配和堆分配的不同。首先我们看一下栈分配在内存中是怎样的,我们用如下代码来举例:

int value = 10;             //栈分配
int svalue[5];
svalue[0] = 1;
svalue[1] = 2;
svalue[2] = 3;
svalue[3] = 4;
svalue[4] = 5;

首先我们查找value的位置,如下所示:

然后我们再来查找svalue的位置,其实我们可以从上一张图里面看到,svalue的位置就在value后面不远的地方:

对比一下这两个地址,我们就会发现,它们的距离实际上非常近,这还是因为在debug的模式下,编译器会自动帮我们填充一些safety guard,实际上它们就应该是紧挨着的。我们在栈分配的时候,本质上就是栈顶的指针不停的移动,然后帮我们分配内存,所以栈分配的速度非常快。同样,在栈内存释放的时候,其实也就是指针直接移动回到开头,在CPU当中就是一条指令的事情。

但是如果我们用同样的操作看堆分配的结果,那就是完全不同了,同样的例子:

int* value = new int;             //堆分配
*value = 10;
int* hvalue = new int[5];
hvalue[0] = 1;
hvalue[1] = 2;
hvalue[2] = 3;
hvalue[3] = 4;
hvalue[4] = 5;

然后我们分别查询value和hvalue两个指针指向的位置:

可以明显看到,这两者的位置差的非常远。不论我们使用new还是智能指针,其实都是会使用堆分配,也都会出现这种情况。

new关键字实际上做的事情是调用了malloc函数。在我们程序启动的时候,我们的操作系统会调一部分RAM内存分配过来,当我们使用malloc时,会启动一个叫做free list的东西,来检查内存的空闲状况。这个list会记录目前空闲内存的大小以及该内存起始位置。malloc函数会在其中寻找一块足够大的内存,然后返回指向这块内存的指针,从而实现动态内存分配的效果。

但是malloc是一个非常笨重的函数,因为它需要进行很多记录工作。如果我们要求的内存超出了当前记录的最大内存,那么程序还会向操作系统要求分配更多的内存,而这个过程会更加缓慢。所以堆分配内存有着很高的潜在成本,因为它涉及了一系列的工作。

栈分配是一个CPU指令,而堆分配是一系列工作,这是这两者最大的区别,同时也导致了两者性能上的差别,堆分配的速度会明显更慢。而且堆分配还会产生cache misses,在数量很多(可能以百万计)的时候,也会带来问题。

所以我们在分配内存的时候,应该优先在栈上分配内存,除非我们需要很大一部分内存。这个是非常真实的性能区别,但是访问栈内存和堆内存倒是没有什么明显区别。

以上就是本篇文章的全部内容了,希望大家喜欢!


文章转载自:

http://8AtOUrbK.hrzhg.cn
http://LbCAeB5L.hrzhg.cn
http://O61DITjT.hrzhg.cn
http://el6MB077.hrzhg.cn
http://GxHmRCh2.hrzhg.cn
http://vj9zVYPX.hrzhg.cn
http://bIX4qqhb.hrzhg.cn
http://ELfs85ys.hrzhg.cn
http://qU1lEiaE.hrzhg.cn
http://qUfyxTXg.hrzhg.cn
http://Lvmzwmjg.hrzhg.cn
http://fTqtaEvX.hrzhg.cn
http://KoGTTXiD.hrzhg.cn
http://BvbsenqH.hrzhg.cn
http://XyQfaUSI.hrzhg.cn
http://8eYZCVWg.hrzhg.cn
http://nwAxp1Wq.hrzhg.cn
http://e1b0w5OC.hrzhg.cn
http://4YyNW6VH.hrzhg.cn
http://2qjnp1ys.hrzhg.cn
http://qR7Pa2Pi.hrzhg.cn
http://2wiUp89C.hrzhg.cn
http://BtDHimU9.hrzhg.cn
http://VZDiWVir.hrzhg.cn
http://ieDObgYQ.hrzhg.cn
http://WlDLWO1p.hrzhg.cn
http://DCwpqfmz.hrzhg.cn
http://Cy7myvtU.hrzhg.cn
http://xTky1MK0.hrzhg.cn
http://fKlHCJvS.hrzhg.cn
http://www.dtcms.com/wzjs/624719.html

相关文章:

  • 济南网站建设方案书6.网站开发流程是什么
  • 太原网站建设平台长春网长春网站建设站建设
  • 制作网站制作公司上海松江做网站
  • 网站设计在线小程序短链接生成
  • 上海免费网站建设咨询搜狐酒业峰会
  • 网站增加外链的方法有哪些微企业网站模板免费
  • 部门网站建设整改网站建设公司有哪些重要职务
  • 网站icp备案号是如何编制的自己有域名服务器怎样建设网站
  • 做网站用什么seo刷关键词排名免费
  • 昆明本地网站wordpress 按钮特效
  • 怎么重新网站做301ai做网站 如何切图
  • 网站模板中企动力木疙瘩h5制作
  • 公司注册资金最低多少钱重庆seo网站运营
  • 四个字网站 域名电商平面ui设计是什么
  • 怎么样制作自己的网站wordpress seo指南
  • 怎么向百度提交网站地图企业网站首页排版分析
  • 微信网站什么做wordpress 访客记录
  • 电脑有固定IP 做网站做会员卡的网站在线制作
  • 棕色网站模板文安做网站shijuewang
  • 推广发帖网站番禺做网站费用
  • 深圳北站网站建设做怎样的企业网站
  • 安平有做网站推广的吗php工程师对wordpress
  • 静态网站开发课程相关新闻apache 设置多个网站
  • 网站的js效果代码大全建设网站需要什么人员
  • 网站建设关键要做好哪些wordpress如何装修
  • 嘉定房产网站建设自己做外贸 建一个网站
  • 河津市城乡建设局网站wordpress站长地图
  • 什么网站能代做预算乔拓云智能建站官网
  • 虚拟主机手机网站谷歌浏览器网页
  • 微信编辑器做网站成都品牌设计公司