C与C++中堆是什么?

作一个简单的堆的示例。... 作一个简单的堆的示例。 展开
 我来答
夏天肥鱼07561
高粉答主

2018-05-22 · 每个回答都超有意思的
知道小有建树答主
回答量:330
采纳率:100%
帮助的人:9.5万
展开全部

我们说的堆(heap) 是程序员申请的内存空间,在C/C++中,你可以理解为:所有非常量的指针空间。和heap对应的,还有栈(stack)、静态区(static)、常量区(const),以及程序代码区。这些都是程序运行所需要申请的内存空间。

heap堆和其它内存区的主要差别,一个是heap是由程序员申请、释放和管理的(而不是由系统和程序自动分配和释放),是动态的;另外一个就是,其它区域都是有固定大小的,而heap的大小,仅仅受到内存和虚拟内存大小的限制,也就是说,理论上你可以申请的堆空间是无限大的。

例子:main() {const char* m = "123";//"123" 常量区,m在栈(指针的本身都在栈,下同)char s[] = "abc"; //常量区char *p3 = "123456"; //常量区static int c =0; //全局(静态)初始化区 char *p1,*p2;p1 = (char *)malloc(10); //分配得来得10字节的区域就在堆区。 p2 = new char[20]; //分配得来得20字节的区域就在堆区。

C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

北京羿射旭科技有限公司
2019-11-29 广告
高阻尼隔震橡胶支座的价格大概在每个一两百元,便宜的有十几二十元,贵的有好几百元。高阻尼隔震橡胶支座的价格受多方面影响,如品牌、类别、规格、市场等。关键还是要学会挑选方法。变检算是否满足相应地震力作用下的使用要求。b..应根据跨度和温度变化幅... 点击进入详情页
本回答由北京羿射旭科技有限公司提供
tecentmoon
2010-08-20
知道答主
回答量:35
采纳率:0%
帮助的人:7.9万
展开全部
堆即动态申请的一片内存空间。
c: malloc函数申请,比如:void *buf = malloc(1024);/* 申请1024Bytes */,释放时使用free(buf);

c++: new关键字申请,当然也可以使用malloc. int *buf = new int[1024];/* 申请 1024*sizeof(int)Bytes */,释放时使用delete buf;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bhtzu
推荐于2017-10-03 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4247万
展开全部

堆(heap) 是程序员申请的内存空间,在C/C++中,你可以理解为:所有非常量的指针空间。

和heap对应的,还有栈(stack)、静态区(static)、常量区(const),以及程序代码区。这些都是程序运行所需要申请的内存空间。

heap堆和其它内存区的主要差别,一个是heap是由程序员申请、释放和管理的(而不是由系统和程序自动分配和释放),是动态的;另外一个就是,其它区域都是有固定大小的,而heap的大小,仅仅受到内存和虚拟内存大小的限制,也就是说,理论上你可以申请的堆空间是无限大的。

例子:

main() 
{
const char* m = "123";//"123" 常量区,m在栈(指针的本身都在栈,下同)
char s[] = "abc"; //常量区
char *p3 = "123456"; //常量区
static int c =0; //全局(静态)初始化区 
char *p1,*p2;
p1 = (char *)malloc(10); //分配得来得10字节的区域就在堆区。 
p2 = new char[20]; //分配得来得20字节的区域就在堆区。 
free(p1);//需要自己释放
delete p2;//需要自己释放
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
uewing
2010-08-20 · TA获得超过354个赞
知道小有建树答主
回答量:159
采纳率:100%
帮助的人:136万
展开全部
C和C++中的堆说白了就是一块内存
当程序运行的时候,系统自动为程序分配一块内存,这片内存是空的。
每当你使用malloc或者new的时候,你新声明的变量就都会被存入这片内存。
使用完毕之后如果你不及时地free(p)或者是delete之前声明的变量的话,堆中刚占用的内存就不会释放。这也是很常见的内存泄漏问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a9ca369
推荐于2017-09-15 · TA获得超过143个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:168万
展开全部
堆和栈的区别 (转贴)
非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!

堆和栈的区别
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代

参考资料: http://tieba.baidu.com/f?kz=150791801

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式