关于编程初学者来讲会接触到一些难以明白的称号,好比堆(heap)、栈(stack)、客栈(stack)等。初学开辟历程中每每让人混淆不清。今天我们去谈谈堆和栈的详细区分,去资助初学者理清思绪。
堆和栈的区分一向都是永久的话题,为此我也查了许多的材料,以防本身的明白毛病,而给别人形成明白偏向。
先从简单的一个例子引出堆和栈:
void funcon(){
int *p = (int *)malloc(10*sizeof(int));
}
那是C言语开辟进修历程中,必弗成免要进修的常识,动态分配一块空间,空间正在堆区巨细是40字节(32位体系中)。而界说的指针变量p是部分变量(正在栈区中 占用4字节空间),用来寄存方才前面动态分配的空间的尾地点。能够看出,正在这一句代码中同时包罗了栈和堆,如图1所示。

图1堆和栈
我们从以下几个方面对照一下堆和栈:
(1)存储内容差别
栈:正在函数挪用时,栈中寄存的是函数中(底下是函数挪用后的下一条指令)各个参数(部分变量)。
堆:一样平常是正在堆的头部用一个字节寄存堆的巨细。堆中的具体内容有程序员布置。
(2)管理体式格局上差别
栈:由体系主动分派空间,同时体系主动开释空间。 比方,声明正在函数中一个部分变量 int b; 体系主动正在栈中为b拓荒空间,当对应的生计周期完毕后栈空间主动开释。
堆:需求程序员手动申请而且手动开释,并指明巨细,正在C言语中malloc函数申请,开释free函数,正在中 new和dele实现。
(3)空间巨细差别
栈:获得空间较小。正在Windows下,一样平常巨细是1M或2M,当盈余栈空间缺乏时,分派失利overflow。
堆:得到空间凭据体系的有用虚拟内存有关,对照天真,比较大。
(4)可否发生碎片差别
栈:不会发生碎片,空间一连。
堆:接纳的是链表的存储体式格局,会发生碎片。
(5)发展偏向差别
栈: 背低地点扩大的数据结构,是一块一连的内存的地区。
堆: 背下地点扩大的数据结构,是不一连的内存地区。那是因为体系是用链表来存储的余暇内存地点的,天然是不一连的,而链表的遍历偏向是由低地点背下地点。
(6)分派体式格局差别
栈:有2种分派体式格局:静态分派和动态分配,静态由编译器完成,比方部分变量;静态由alloca函数实现,而且编译器会停止开释。
堆: 都是动态分配的,没有静态分派的堆。
(7)分派效力差别
栈:由体系主动分派,速度较快。但程序员是没法掌握的。
堆:由new分派的内存,一样平常速度比较慢,并且轻易发生内存碎片,不外用起来轻易。
以上是栈和堆几个方面的差别,期望经由过程上面的材料能够资助初学者分清堆和栈。
相干推荐
宣布于 2018-12-25 11:33
•
4次浏览
宣布于 2018-12-24 15:21
•
83次浏览
编程言语是如何事情的
明白编译器内部道理,能够让您更高效应用它。根据编译的事情递次,逐渐深切编程语...
宣布于 2018-12-23 17:25
•
304次浏览
模块分别的"划"是计划的意义,意指如何公道的将一个很大的软件分别为一系列功用自力的局部协作完成体系的...
宣布于 2018-12-23 11:56
•
279次浏览
宣布于 2018-12-20 16:45
•-mm78.com_
15次浏览
-mm78.com_
宣布于 2018-12-20 16:29
•
62次浏览
宣布于 2018-12-20 14:20
•
130次浏览
STM32 开辟情况(东西)引见 一、Keil 软件引见 Keil C51 是美国 Keil sof...
宣布于 2018-12-20 10:20
•
135次浏览
宣布于 2018-12-19 16:12
•
110次浏览
宣布于 2018-12-18 16:04
•-新澳门葡京网址_...
134次浏览
宣布于 2018-12-18 08:51
•
224次浏览
宣布于 2018-12-17 16:30
•
28次浏览
宣布于 2018-12-17 16:05
•
209次浏览
C言语中的ASSERT(断言)宏是嵌入式软件开发人员能够运用的最好的调试东西之一。
宣布于 2018-12-17 11:26
•
251次浏览
正在当前,电子信息类专业的大中专学生和念把握产物硬件设想的工程师一样平常都邑接纳STC系列单片机作为入门的...
宣布于 2018-12-15 10:50
•
328次浏览
运用Python停止MySQL的库重要有三个,Python-MySQL(更熟习的名字能够是MySQL...
宣布于 2018-12-15 09:51
•
250-澳门新葡京496.net次浏览
c言语中,并没有字符串这个概念:c中叫做字符数组,存储正在内存中,是一块一连的空间,弗成修正,任何修正...
宣布于 2018-12-10 16:39
•
193次浏览
跟着科技的前进和新技术的推动,编程言语的品种也是愈来愈多,随之带来的转变就是程序员需求跟进进修的语...
宣布于 2018-12-10 14:15
•
264次浏览
awk是一个壮大的文本剖析东西,相对grep的查找,sed的编纂,awk正在其对数据剖析并天生讲演时...
宣布于 2018-12-08 10:39
•
370次浏览
1.C 言语和汇编语言正在单片机编程时各有哪些优缺点? 答:汇编语言是一种用笔墨助记符来示意机械指令的...
宣布于 2018-11-27 16:05
•
166次浏览
类似于C言语中的数组,列表的索引从0最先。索引0对应第一个元素,索引1对应第二元素,依此类推。同时,...
宣布于 2018-11-27 10:13
•
273次浏览
正在写裸机软件时,不可避免的正在主程序中会有一个超等大的 while(1) 轮回,这里里险些包罗全部项目...
宣布于 2018-11-26 10:23
•
339次浏览
Linux 是正在约莫上世纪 90 年月开辟出来的,取它一同问世的另有其他一些完成根蒂根基功用的开源软件。...
宣布于 2018-11-25 10:47
•
2893次浏览
修复了 AMD 和 NVIDIA GPU 上的 OpenCL 减速。 如今,能够为模子启用 DNN_...
宣布于 2018-11-24 10:46
•
747次浏览
一个C顺序能够是由多个离别编译的局部构成,这些差别局部经由过程一个一般叫做链接器(或连接器,载入器)的程...
宣布于 2018-11-24 09:05
•
266次浏览
正在单片机运用开辟中,代码的运用效力题目、单片机抗干扰性和可靠性等题目仍困扰着工程师。为资助工程师处理...
宣布于-澳门新葡京44488 2018-11-22 16:21
•
460次浏览
嵌入式Linux工程师的进修需求具有肯定的C言语根蒂根基,C言语是嵌入式范畴最重要也是最主要的编程言语,...
宣布于 2018-11-22 16:14
•
452次浏览
电路的中心局部是AT89C2051单片机,前面提到它有Pl和P3两组I/O心,我们这里只用到Pl心,...
宣布于 2018-11-22 16:01
•
294次浏览
甲机背乙机发送掌握下令字符,甲机同时吸收乙机发送的数字,并显现正在数码管上。
宣布于 2018-11-21 16:33
•
436次浏览
那就是究极形状了,我们增加了第四止的代码,来看&_min1,它的意义是与_min1的地点,而&_mi...
宣布于 2018-11-15 16:29
•
394次浏览
1. 正在汇编中生存现场,然后挪用C言语编写的中止处置惩罚顺序,义务处置惩罚完成以后,再返回到汇编中规复现场,...
宣布于 2018-11-15 16:17
•
111次浏览
般将硬件初始化的事情交给汇编,对照庞大的操纵交给C言语。
宣布于 2018-11-15 15:20
•
405次浏览
C++是由C言语生长而去的,取C兼容。用C言语写的顺序基本上能够不加修正天用于C++。从C++的名字...
宣布于 2018-11-15 12:58
•
452次浏览
面向历程就是分析出解决问题所需求的步调,然后用函数把这些步调一步一步实现,运用的时刻一个一个顺次挪用...
宣布于 2018-11-13 15:53
•
454次浏览
Serial bootloader是一种异常轻易运用而且低成本的顺序烧写的要领。一般情况,每次烧写M...
宣布于 2018-11-12 16:03
•
161次浏览
C言语支撑递归,即一个函数能够挪用其本身。但正在运用递归时,程序员需求注重界说一个从函数退出的前提,...
宣布于 2018-11-12 15:06
•
376次浏览
范例转换能够是隐式的,由编译器主动实行,也能够是显式的,经由过程运用强迫范例转换运算符去指定。正在编程时...
宣布于 2018-11-12 14:59
•
425次浏览
#include 指令会指导 C 预处理器阅读指定的文件作为输入。预处理器的输出包罗了曾经天生...
宣布于 2018-11-12 14:55
•
465次浏览
多个命令行参数之间用空格分开,然则若是参数自己带有空格,那么通报参数的时刻应把参数安排正在双引号 ""...
宣布于 2018-11-12 14:49
•
292次浏览
然则,若是您预先不晓得需求存储的文本长度,比方您背存储有关一个主题的具体形貌。正在这里,我们需求界说一...
宣布于 2018-11-12 14:46
•
310次浏览
固然阶段四纯属小我私家的对将来的推想,然则,近年来,FPGA也高速生长,显着有昔时汇编语言开辟到C下...
宣布于 2018-11-12 14:23
•
659次浏览
一般状况下,运用最多的要领的就是运用rand函数随机天生真随机数去完成随机数的天生事情。注重这里的真...
宣布于 2018-11-09 16:46
•
370次浏览
stdio.h 是一个头文件 (尺度输入输出头文件) and #include 是一个预处理下令,用...
宣布于 2018-11-08 14:44
•
323次浏览
若是这个函数在读与最初一个字符之前便碰到一个换行符 '\n' 或文件的末端 EOF,则只会返回读取到...
宣布于 2018-11-08 14:38
•
381次浏览
C 言语供应了 typedef 关键字,您能够运用它去为范例与一个新的名字。
宣布于 2018-11-08 08:42
•
344次浏览
所谓"位域"是把一个字节中的二进位分别为几个差别的地区,并阐明每一个地区的位数。每一个域有一个域名,许可...
宣布于 2018-11-08 08:38
•
327次浏览
C言语中数组许可界说可存储雷同范例数据项的变量,构造是 C 编程中另一种用户自定义的可用的数据类型。
宣布于 2018-11-08 08:35
•
337次浏览
DassaultSystèmes*和Nor-Tech *运用英特尔®HPCOrchestrator去...
宣布于 2018-11-08 06:14
•
202次浏览
C言语其实不能间接被计算机所明白,需求将C言语转变成可执行代码,即二进制代码。正在C言语转变成二进制可执...
宣布于 2018-11-07 15:05
•
94次浏览
进修 C 言语的指针既简朴又风趣。经由过程指针,能够简化一些 C 编程义务的实行。
宣布于 2018-11-06 17:09
•
389次浏览
正在单片机运用开辟中,代码的运用效力题目、单片机抗干扰性和可靠性等题目仍困扰着。现归纳出单片机开辟中应...
宣布于 2018-11-05 11:21
•
579次浏览
-澳门新葡京44488
栈区(stack)— 由编译器主动分派开释,寄存函数的参数值,部分变量的值等。其操纵体式格局类似于数据结...
宣布于 2018-11-01 17:55
•
2011次浏览
)这个是操作过程,经由过程随机天生的要领去天生下一个点,然后挪动的历程初经由过程运用空的正在补上,计算机的速度...
宣布于 2018-11-01 11:11
•
721次浏览
#include “reg51.h”
#include “intrins.h” #define...
宣布于 2018-10-31 15:48
•
301次浏览
单片机用16F877,主时钟用20MHz,用32768做准时工夫。能够实现2路定闹,每一起皆可离别设...
宣布于 2018-10-30 15:53
•
128次浏览
最根基的一些数据类型及其所占的内存大小、借有一些根蒂根基的计算机知识(进造转换等)。这些器械正在对C言语有...
宣布于 2018-10-29 15:17
•
496次浏览
关于ARM嵌入式体系的开辟,一向是it行业职员存眷的热点,也是属于一个下门槛的行业,现在也有许多的开...
宣布于 2018-10-26 15:26
•
578次浏览
向上发展:背下地点偏向发展,称为递增客栈
向下发展:背低地点偏向发展,称为递加客栈
宣布于 2018-10-25 15:16
•
88次浏览
举个简朴的例子,您能够新建一个 Word 文档,那便意味着正在硬盘上发生了这个文件。然则您并没有间接控...
宣布于 2018-10-22 14:28
•
538次浏览
将比较慢的递次查找法用较快的二分查找或治序查找法替代,插入排序或冒泡排序法用快速排序、兼并排序或根排...
宣布于 2018-10-19 15:55
•
769次浏览
评价任何一门编程言语,都是招人骂的。 永久是如许。便像是春寒料峭的时节, 街上穿棉袄和穿单衣的擦肩而...
宣布于 2018-10-17 14:09
•
530次浏览
防备滋扰最有用的要领是去除滋扰源、间隔滋扰途径,但每每很易做到,以是只能看单片机抗干扰才能够不敷强了...
宣布于 2018-10-08 16:31
•
709次浏览
起首,正在“逻辑”这个概念领域内,存在实和假那两个逻辑值,而将其对应到数字电路或 C 言语中,便酿成了...
宣布于 2018-10-03 08:50
•
2010次浏览
最最先的时刻,每种计算机皆有本身的机械指令。比方,某种型号的计算机用8位二进制信息10001010表...
宣布于 2018-09-26 09:40
•
353次浏览
第一个阶段是 机器码编程 (您一定晓得计算机只能辨认0和1,之前就是如许编程的)。
宣布于 2018-09-26 09:32
•
337次浏览
正在C言语中,罗列范例是被当作 int 大概 unsigned int 范例去处置惩罚的,以是根据 C 语...
宣布于 2018-09-25 15:45
•
582次浏览
我们需求晓得——变量,实在是内存地点的一个抽像名字而已。正在静态编译的顺序中,所有的变量名都邑正在编译时...
宣布于 2018-09-25 15:44
•
613次浏览
上述的语句把数组中第五个元素的值赋为 50.0。所有的数组皆是以 0 作为它们第一个元素的索引,也被...
宣布于 2018-09-25 15:43
•
516次浏览
看着有错的顺序,不知该怎样改起,本人经由过程对C的进修,积聚了一些C编程经常犯的毛病,写给列位同砚以供参...
宣布于 2018-09-22 15:42
•
421次浏览
时钟是怎样操控电路的,念相识吗?
宣布于 2018-09-22 15:32
•
541次浏览
批评