全局变量是分配在内存中的动态存储区的,非静态的局部变量包括形参是分配在内存中的动态存储区的,这个存储区是一个称为的区域,除此之外,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语言内存的动态分配相关推荐

  1. C语言内存动态分配与释放

    一.内存分配 对于内存的分配,主要采用的是标记法. 分配方法有两种,一种是静态分配,也就是在程序编译的时候,就完成了对内存的分配.例如当一个数组在声明时,指定长度之后,它所需要的内存在编译时就会被分配 ...

  2. C语言内存管理超详解

    补充: 1.一个正在运行着的C编译程序占用的内存分为栈区.堆区.未初始化数据区(BBS).初始化数据区.代码区5个部分. (1)栈区:存放函数的参数值.局部变量的值.由编译器自动分配释放. (2)堆区 ...

  3. 图解Go语言内存分配 https://juejin.im/post/5c888a79e51d456ed11955a8

    图解Go语言内存分配 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理.这样可以自主地实现更好的内存使用模式,比如内存池.预分配等等.这样,不会每次内存分配都需要进行系 ...

  4. C语言 内存管理的细枝末节

    1. 一些细枝末节的概念 - 作用域.链接.存储时期 1. 作用域 (scope) 作用域限定了程序中可以访问一个标识符一个或多个区域. C语言中,一个变量的作用域可以是代码块作用域,函数原型作用域或 ...

  5. C语言与JAVA内存管理_深入理解C语言内存管理

    之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...

  6. c语言 linux sd_深入理解Linux C语言内存管理

    问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...

  7. C语言内存管理内幕(二)----半自动内存管理策略

    2019独角兽企业重金招聘Python工程师标准>>> C语言内存管理内幕(二)----半自动内存管理策略 转载于:https://my.oschina.net/hengcai001 ...

  8. 内存的动态分配过程分析

    #include <stdio.h> #include <malloc.h>int main() {int i = 5; //分配了4个字节,静态分配int * p = (in ...

  9. C语言 | 内存对齐02 - 为什么会有内存对齐?它解决了什么问题

    文章目录 一.前言 二.内存对齐为4个字节的好处 三.内存对齐的目的是以空间换取速度 3.1.内存对齐为4的例子 3.2.内存没有使用内存对齐的例子 四.掌握内存对齐的必要性 一.前言 内存对齐的目的 ...

最新文章

  1. 2D图片3秒变立体,变换视角流畅自然:Adobe实习生的智能景深算法,登上顶级期刊...
  2. MUI 宫格组件(grid)怎么取消mui-active背景色?(优先级设置问题)- 踩坑篇
  3. Linux服务跟随启动,Linux—添加开机启动(服务/脚本)
  4. Spring3.0包描述
  5. cassandra随机获取数据_从数据库随机获取数据库
  6. app 如何接收遥控信息_如何选购红外接收头?华新告诉你产品的标准
  7. c语言 屏幕亮度调节_4096级屏幕亮度调节:改善安卓机自动亮度调节顽疾
  8. java权限是怎么做的_java如何做权限管理
  9. Linux信号量常用操作表
  10. 希捷硬盘维修工具 v5.10.6 绿色免费版
  11. GIF 屏幕录制工具
  12. java生成json格式数据 和 java遍历json格式数据
  13. Java面向对象知识点总结
  14. 使用kindeditor直接粘贴本地图片或者是qq截图
  15. Thinkphp5.1整合支付宝APP支付
  16. window中的DLL和linux中的os文件是什么东西
  17. 初步了解3dmax建模方式和多边形建模
  18. 最新:亚马逊运营思路
  19. windows7 VCP安装失败的解决办法
  20. 多种详细讲解小程序页面传值

热门文章

  1. 中的挂起是什么意思_仪表板亮奇怪指示灯,乌龟晒太阳是什么意思?老司机:不懂别上路...
  2. java canvas 画圆_java – 如何在Android中通过canvas绘制圆?
  3. python写的小程序怎么封装_微信小程序源码分享之封装request的方法
  4. 10g 回收站(RECYCLE BIN)导致查询表空间的利用率时很慢
  5. 常见笔顺错误的字_最全汉字笔顺正确写法,建议家长为孩子收藏
  6. 关于时间操作工具类整理
  7. pg 日期和时间的运算操作
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的学生社团管理系统
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生考勤管理系统及智能分析系统
  10. 基于JAVA+SpringBoot+Mybatis+MYSQL的工资管理系统