C语言中,什么是栈,什么是堆

能否对此例子进行说明?inti=1;printf("%d%d%d",i,i--,i++);... 能否对此例子进行说明?int i = 1;
printf("%d %d %d",i,i--,i++);
展开
 我来答
小星星教育知识分享
高粉答主

2019-11-23 · 用教师的智慧点燃学生的智慧火花
小星星教育知识分享
采纳数:202 获赞数:67130

向TA提问 私信TA
展开全部

1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。局部变量,任务线程函数之类的是放在(使用)栈里面的,栈利用率高一些。其操作方式类似于数据结构中的栈。特别,栈是属于线程的,每一个线程会有一个自己的栈。

2、堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。注意它和数据结构中的堆是两回事,分配方式倒是类似于链表,常见的就是malloc出来的都是属于堆区,就像固定出来的区域,到free的时候才释放,有点类似全局的,静态的。

扩展资料

栈内存是由编译器自动分配与释放的,它有两种分配方式:静态分配和动态分配。

1、静态分配是由编译器自动完成的,如局部变量的分配(即在一个函数中声明一个int类型的变量i时,编译器就会自动开辟一块内存以存放变量i)。

2、动态分配由alloca函数进行分配,但是栈的动态分配与堆是不同的,它的动态分配是由编译器进行释放,无需任何手工实现。

参考资料来源:百度百科—栈

参考资料来源:百度百科—堆

百度网友2b7192e7b5
推荐于2017-10-04 · TA获得超过1917个赞
知道小有建树答主
回答量:496
采纳率:0%
帮助的人:349万
展开全部
在c/c++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

如果你的这两个语句是出现在全局部分,那这个i就是被存储在全局/静态存储区;如果是出现在局部某个函数里,那i就被存储的栈里面。具体可以怎么理解?
栈里的东西自动分配内存空间,自动释放内存,而堆里面的东西只要是用到内存的都要手动分配,malloc函数在这个时候就起作用了。

栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2013-01-06 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3396万
展开全部
代码中使用的普通变量、数组、指针等,使用的都是称作“堆”的内存,而调用函数时传递的参数则使用“栈”内存。这是系统管的事,一开始,编程者没必要关心这方面的内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
信耕顺肖雀
2019-06-06 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.3万
采纳率:35%
帮助的人:919万
展开全部
在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
系榆6I
2013-01-06 · TA获得超过389个赞
知道小有建树答主
回答量:359
采纳率:0%
帮助的人:249万
展开全部
栈是系统自动分配内存的,堆是程序员自己动态申请的内存
比如,你int i;i就是存放在栈内存里面
比如
char *p=(char*)malloc(sizeof(char));p指向的内存就是存放在堆内存里面的
希望能帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式