堆和栈的区别
堆和栈的区别
种地瓜 发表于1年前
堆和栈的区别
  • 发表于 1年前
  • 阅读 12
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 堆和栈的区别

堆和栈的区别主要有一下几点:

   1.管理方式不同:

                    栈是由编译器自动管理,不需要手动管理,

                    堆是由程序员管理,容易产生内存泄露

   2.空间大小不同:

                    一般32为系统,堆的大小可以达到4GB, 

                    对于栈来讲,栈由空小大小限制,在vc下,默认栈大小是1MB,但是可以修改的

   3.产生碎片方式不同:

                    对于堆来说,频繁new/delete造成内存空间不连续,会产生大量的碎片,使得程序效率降低

                    但是栈不会存在这个问题

   4.生长方向不同:

                    对于堆来说,生长方式是向上的,朝着地址内存增长的方向    

                    栈,生长方式是向下的,朝着内存地址减小的方向生长

   5.分配方式不同:

                    堆是动态分配的,没有静态分配的堆,

                    栈有两种分配方式,静态分配和动态分配,静态分配是由编译器完成的,比如局部变量的分配,动态分配是由allocl等函数分配的,但是栈的动态和堆的动态分配不同,它是由编译器进行释放,无需人工释放。

   6.分配效率不同:

                    栈是机器系统提供的数据结构,计算机在底层堆栈提供支持,分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高,堆则是C/C++函数库提供的,它的机制是很复杂的, 显然栈的效率高一些。

标签: 堆;栈
共有 人打赏支持
粉丝 10
博文 170
码字总数 44807
×
种地瓜
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: