文档章节

堆和栈的区别

种地瓜
 种地瓜
发布于 2016/10/03 20:04
字数 428
阅读 12
收藏 0

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

   1.管理方式不同:

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

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

   2.空间大小不同:

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

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

   3.产生碎片方式不同:

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

                    但是栈不会存在这个问题

   4.生长方向不同:

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

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

   5.分配方式不同:

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

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

   6.分配效率不同:

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

© 著作权归作者所有

共有 人打赏支持
种地瓜
粉丝 9
博文 175
码字总数 44807
作品 0
深圳
程序员

暂无文章

简单谈一谈压力测试

最近,在做API的压力测试,趟了不少坑,然后呢,简要记录一下。 压测前需要准备的一些事 拿到API文档不要立马上手,先基准测试,就是执行一次接口测试,至少要压这个接口,要先熟悉一下他的参...

浮躁的码农
31分钟前
0
0
PHP 错误调查

一.定义:PHP错误是由PHP无法读懂执行的代码引起的错误。 二:错误日志 error log 1.在php.ini 里设置 log_errors = on, log文件位置 error_log=/tmp/php_errors.log 2.代码里设置ini_set('...

忙碌的小蜜蜂
34分钟前
0
0
knn算法

import numpy as np def CreateDateSet(): group = np.array([[1.0, 2.0], [1.2, 0.1], [0.1, 1.4], [0.3, 3.5]]) labels = ['A','A','B','B'] return group,labels coding:utf-8 from numpy......

南桥北木
35分钟前
0
0
自己手写一个 SpringMVC 框架

前端框架很多,但没有一个框架称霸,后端框架现在Spring已经完成大一统.所以学习Spring是Java程序员的必修课. Spring 框架对于 Java 后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,...

别打我会飞
今天
2
0
01-《Apache Tomcat 9》之文件索引

《Apache Tomcat 9》是《看Apache官方文档学英语》的第一个专栏!让我们一起在看文档的过程中学英语,在学英语的过程中夯实技术! Documentation Index - 文件索引 Introduction - 介绍 This...

飞鱼说编程
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部