zoukankan      html  css  js  c++  java
  • 类对象定义时的堆栈问题

    前言


      我们可能会对不同定义形式下类对象在堆栈中是如何分配的感到好奇,现在就举一个例子进行分析。

    举例分析


      

    1、 A a(); //隐式,栈中分配
    2、 A b = A(); //显式,栈中分配
    3、 A *a = new A(); //堆中分配

      对于前两种情况,内存是在进程虚拟地址空间中开的一块栈的内存,而后一种情况是在堆中开的内存。而且堆的大小远大于栈的大小

      它们的区别主要是在于内存大小和回收问题,由于堆栈(简称为栈 stack )是系统数据结构,所以统一由操作系统操作,系统自动地帮你申请释放内存,Linux中可以用命令ulimit -s (单位是kb)来查看进程中栈的内存。

      堆就不一样了,开发者需要参与堆的管理,手动的 free() 掉已经申请的空间。开发者的使用将直接影响系统的性能。

      

    总结


      1、在堆栈的大小已知且保证不会超过的情况下,优先使用堆栈能保证效率

      2、在堆栈的大小未知的情况下,为了防止stack overflow ,优先使用堆

    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    js对象深拷贝
    数组去重
    css布局之双飞翼布局
    css布局之圣杯布局
    在浏览器中输入URL并回车后都发生了什么?
    浮动和清除浮动
    Javascript 构造函数模式、原型模式
    Javascript之对象组合继承
    js可以随意拖拽的div的实现
    博客美化 之博客的魔方效果
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/7806100.html
Copyright © 2011-2022 走看看