C语言内存的动态分配
全局变量是分配在内存中的动态存储区的,非静态的局部变量包括形参是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域,除此之外,C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据是临时存放在一个特别的自由存储区,称为堆区,可以根据需要向系统申请所需大小的空间。
由于未在声明部分定义它们为变量或数组,因此不能通过变量名或数组名来进行引用,只能通过指针来引用
如何建立内存的动态分配
- 用malloc函数开辟动态存储区 函数原型为:void *malloc(unsigned int size)
其作用是在内存的动态存储区中分配一个长度为size的连续空间。形参size的类型定为无符号整型(不允许为负数)。此函数的值(即“返回值”)是所分配区域的第一个字节的地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的第一个字节。
如:
malloc(100)//开辟100字节的临时分配域
//函数值为其第1个字节的地址
- 用calloc函数开辟动态存储区
void *calloc(unsigned n,unsigned size)
其作用是在内存的动态存储区中分配 n个长度为size的连续空间,这个空间一般比较大﹐足以保存一个数组。
用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。这就是动态数组。函数返回指向所分配域的第一个字节的指针;如果分配不成功,返回NULL。
如:
p=calloc(50,4);//开辟50×4个字节的临时分配域
//把首地址赋给指针变量p
- 用realloc函数重新分配动态存储区其函数原型为
void *realloc( void * p, unsigned int size);
如果已经通过malloc函数或calloc函数获得了动态空间,想改变其大小,可以用recalloc 函数重新分配。
用realloc函数将p所指向的动态空间的大小改变为size。p的值不变。如果重分配不成功,返回NULL。
如
realloc( p,50);//将p所指向的已分配的动态空间改为50字节
- 用free函数释放动态存储区
void free( void n p);
其作用是释放指针变量p所指向的动态空间,使这部分空间能重新被其他变量使用。p应是最近一次调用calloc或malloc函数时得到的函数返回值。
如:
free( p);//释放指针变量p所指向的已分配的动态空间
//free函数无返回值
以上4个函数的声明在stdlib.h头文件中,在用到这些函数时应当用“# include <stdlib.h>”指令把stdlib.h头文件包含到程序文件中。
C语言内存的动态分配相关推荐
- C语言内存动态分配与释放
一.内存分配 对于内存的分配,主要采用的是标记法. 分配方法有两种,一种是静态分配,也就是在程序编译的时候,就完成了对内存的分配.例如当一个数组在声明时,指定长度之后,它所需要的内存在编译时就会被分配 ...
- C语言内存管理超详解
补充: 1.一个正在运行着的C编译程序占用的内存分为栈区.堆区.未初始化数据区(BBS).初始化数据区.代码区5个部分. (1)栈区:存放函数的参数值.局部变量的值.由编译器自动分配释放. (2)堆区 ...
- 图解Go语言内存分配 https://juejin.im/post/5c888a79e51d456ed11955a8
图解Go语言内存分配 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理.这样可以自主地实现更好的内存使用模式,比如内存池.预分配等等.这样,不会每次内存分配都需要进行系 ...
- C语言 内存管理的细枝末节
1. 一些细枝末节的概念 - 作用域.链接.存储时期 1. 作用域 (scope) 作用域限定了程序中可以访问一个标识符一个或多个区域. C语言中,一个变量的作用域可以是代码块作用域,函数原型作用域或 ...
- C语言与JAVA内存管理_深入理解C语言内存管理
之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...
- c语言 linux sd_深入理解Linux C语言内存管理
问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...
- C语言内存管理内幕(二)----半自动内存管理策略
2019独角兽企业重金招聘Python工程师标准>>> C语言内存管理内幕(二)----半自动内存管理策略 转载于:https://my.oschina.net/hengcai001 ...
- 内存的动态分配过程分析
#include <stdio.h> #include <malloc.h>int main() {int i = 5; //分配了4个字节,静态分配int * p = (in ...
- C语言 | 内存对齐02 - 为什么会有内存对齐?它解决了什么问题
文章目录 一.前言 二.内存对齐为4个字节的好处 三.内存对齐的目的是以空间换取速度 3.1.内存对齐为4的例子 3.2.内存没有使用内存对齐的例子 四.掌握内存对齐的必要性 一.前言 内存对齐的目的 ...
最新文章
- 2D图片3秒变立体,变换视角流畅自然:Adobe实习生的智能景深算法,登上顶级期刊...
- MUI 宫格组件(grid)怎么取消mui-active背景色?(优先级设置问题)- 踩坑篇
- Linux服务跟随启动,Linux—添加开机启动(服务/脚本)
- Spring3.0包描述
- cassandra随机获取数据_从数据库随机获取数据库
- app 如何接收遥控信息_如何选购红外接收头?华新告诉你产品的标准
- c语言 屏幕亮度调节_4096级屏幕亮度调节:改善安卓机自动亮度调节顽疾
- java权限是怎么做的_java如何做权限管理
- Linux信号量常用操作表
- 希捷硬盘维修工具 v5.10.6 绿色免费版
- GIF 屏幕录制工具
- java生成json格式数据 和 java遍历json格式数据
- Java面向对象知识点总结
- 使用kindeditor直接粘贴本地图片或者是qq截图
- Thinkphp5.1整合支付宝APP支付
- window中的DLL和linux中的os文件是什么东西
- 初步了解3dmax建模方式和多边形建模
- 最新:亚马逊运营思路
- windows7 VCP安装失败的解决办法
- 多种详细讲解小程序页面传值
热门文章
- 中的挂起是什么意思_仪表板亮奇怪指示灯,乌龟晒太阳是什么意思?老司机:不懂别上路...
- java canvas 画圆_java – 如何在Android中通过canvas绘制圆?
- python写的小程序怎么封装_微信小程序源码分享之封装request的方法
- 10g 回收站(RECYCLE BIN)导致查询表空间的利用率时很慢
- 常见笔顺错误的字_最全汉字笔顺正确写法,建议家长为孩子收藏
- 关于时间操作工具类整理
- pg 日期和时间的运算操作
- 基于JAVA+SpringMVC+Mybatis+MYSQL的学生社团管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生考勤管理系统及智能分析系统
- 基于JAVA+SpringBoot+Mybatis+MYSQL的工资管理系统