C语言 - 堆和栈
一、堆内存
1、就是程序员手动管理的一块内存,在C语言中,可以理解为用malloc、realloc等申请空间的一些函数,这些函数所申请的空间就是堆空间
2、C语言中,堆空间是申请和释放 malloc/free 这两个函数来实现
3、堆内存和物理空间的大小有关,如果物理空间够大的话,理论上,程序员可以申请足够大的内存
4、无法和标志符建立连接,因此堆内存的申请一定需要用到指针来接受函数申请到后返回的内存地址
例如:int* p = malloc(sizeof(int));此函数就申请了4个字节的内存空间
二、栈内存
1、栈内存是系统管理的一块内存,他的内存大小有限,不过一般程序员正常使用时,都是足够大的
2、栈内存的申请和释放都是系统进行管理的 例如:int a=0;
3、栈内存的存储数据的特点是先进后出原则
4、栈内存的使用一般是在局部函数中,因为局部函数作用域一般比较短,因此栈的生命周期一般较短
三、总结
栈内存和堆内存的区别主要围绕:内存的生成和释放,内存空间的大小
栈内存的优点:栈内存不存在内存管理者的错误,因为他是自动生成和释放的
栈内存的缺点:栈内存的空间不大,存储数据的时间不长
堆内存的优点:对内存的数据的保留受程序员控制
堆内存的缺点:对无用的内存如果没有及时清理,有可能造成内存泄漏
注:内存申请的速度上,栈内存要快于堆内存
注:栈内存的生命周期一般较短,因为作用域的缘故
C语言 - 堆和栈的更多相关文章
- C语言堆和栈
堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap ...
- 栈 堆 stack heap 堆内存 栈内存 内存分配中的堆和栈 掌握堆内存的权柄就是返回的指针 栈是面向线程的而堆是面向进程的。 new/delete and malloc/ free 指针与内存模型
小结: 1.栈内存 为什么快? Due to this nature, the process of storing and retrieving data from the stack is ver ...
- C语言中的栈和堆
原文出处<http://blog.csdn.net/xiayufeng520/article/details/45956305#t0> 栈内存由编译器分配和释放,堆内存由程序分配和释放. ...
- (十一)C语言中内存堆和栈的区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...
- C语言中的堆与栈20160604
首先声明这里说的是C语言中的堆与栈,并不是数据结构中的!一.前言介绍:C语言程序经过编译连接后形成编译.连接后形成的二进制映像文件是静态区域由代码段和数据段(由二部分部分组成:只读数据 段,未初始化数 ...
- C语言中堆和栈的区别
原文:http://blog.csdn.net/tigerjibo/article/details/7423728 C语言中堆和栈的区别 一.前言: C语言程序经过编译连接后形成编译.连接后形成的二进 ...
- C语言学习笔记——堆和栈——未整理
C语言笔记 栈区 栈stack是一种先进后出的内存结构,所有的自动变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出.出入栈是由C语言编译器自动分配 ...
- 【转】C语言堆栈入门——堆和栈的区别
@2019-04-25 [小记] C语言堆栈入门——堆和栈的区别
- C语言堆栈入门——堆和栈的区别
来看一个网上很流行的经典例子: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc& ...
随机推荐
- PTA(Advanced Level)1036.Boys vs Girls
This time you are asked to tell the difference between the lowest grade of all the male students and ...
- 【案例分享】在 React 框架中使用 SpreadJS 纯前端表格控件
[案例分享]在 React 框架中使用 SpreadJS 纯前端表格控件 本期葡萄城公开课,将由国电联合动力技术有限公司,资深前端开发工程师——李林慧女士,与大家在线分享“在 React 框架中使用 ...
- 查找担保圈-step4-提取s1中担保圈路径中的成员
USE [test] GO /****** Object: StoredProcedure [dbo].[p02_get_group_member] Script Date: 2019/7/8 14: ...
- c++学习笔记之类和对象(三、static静态成员变量和静态成员函数)
一.static静态成员变量 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响.是有时候我们希望在多个对象之间共享数据,对象 a 改变 ...
- Swoft 2.0.5 更新,新增高效秒级定时任务、异常管理组件
什么是 Swoft ? Swoft 是一款基于 Swoole 扩展实现的 PHP 微服务协程框架.Swoft 能像 Go 一样,内置协程网络服务器及常用的协程客户端且常驻内存,不依赖传统的 PHP-F ...
- 从0开始入门ssm-crm系统实战
喜欢就点个赞呗! GitHub项目ssm-learn-crm show me the code and take to me,做的出来更要说的明白 1.1 克隆 git clone https://g ...
- C++参数传递与STL
C++参数传递与STL 这是一篇备忘录形式的内容,涉及到的内容比较基础 今天写了一个小算法,用一个set在函数间传递,记录各个函数中的结果.但是最后结果显示set中的元素是0个.查了一下才发现,用来C ...
- 02 Linux常用基本命令(二)
1.Linux的文件系统格式 1.以 / 为根目录,成树状结构分布 2.查看根目录下有什么 ls / 3./下有超级用户root的家目录(root),还有普通用户的家目录(/home) 4.常用文件夹 ...
- PHP高级进阶之路
一:常见模式与框架 学习PHP技术体系,设计模式,流行的框架 常见的设计模式,编码必备 Laravel.ThinkPHP开发必不可少的最新框架 YII.Symfony4.1核心源码剖析 二:微服务架构 ...
- Java泛型:利用泛型动态确认方法返回值类型
根据泛型类型动态返回对象 public <T extends PackObject> T unPackMessage(String interfaceCode, String respVa ...