博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈C语言中的内存分配
阅读量:6424 次
发布时间:2019-06-23

本文共 1015 字,大约阅读时间需要 3 分钟。

在C语言中,根据数据在内存中存在的时间(生存期)不同,将内存空间分为三个区:

1.程序区:用于存储程序的代码,即程序的二进制代码;

2.静态存储区:用于存储全局变量和静态变量,这些变量的空间在程序编译时就已经分配好了;

3.动态存储区:用于在程序执行时分配的内存,又分为:堆区(heap)和堆栈区(stack)两种。

                 堆区:用于动态内存分配,程序运行时由内存分配函数在堆上分配内存。在C语言中,只要使用指针才能动态的分配内存

                 堆栈区:在函数执行时,函数内部的局部变量和函数参数的存储单元的内存区域,函数运行结束时,这些内存区域会自动释放。

动态内存分配

       在C语言中用内存分配函数来实现内存的动态分配,这些函数有:malloc()、calloc()和realloc()函数。

(1).malloc(): 使用这个函数时需要包含头文件<stdlib.h>。使用该函数需要指定要分配的内存字节数作为参数,函数返回值为所分配内存的第一个字节的地址。因为返回值是一个地址,这里需要用指针。例如:

int *pNumber=(int *) malloc(100);

这条语句分配了100个字节的内存,并把这个内存块的地址赋给pNumber,这个内存块保存25个int值,每个int占4个字节。如果不能分配请求的内存,malloc()会返回一个null指针。所以使用之前,要先判断一下是否为null。例如:

if(pNumber==null){  //提示内存不足 }

有时使用sezeof运算符分配内存,如:pNumber=(int *)malloc(25*sizeof(int));该例子分配了25个int型大小的内存,即25*4=100个字节;

(2)calloc():它把内存分配为给定大小的数组,并且初始化了分配的内存,每位都为0;该函数需要两个参数:数组元素的个数和数组元素占用的字节数。例如:

   int *pNumber=(int *)calloc(25,sizeof(int));

释放动态分配的内存:

堆上分配的内存会在程序结束时自动释放,但最好是在使用完这些内存后立即释放。如果不释放,可能会引起内存泄露。使用free()函数释放内存,参数是内存地址。

free(pNumber);

 

转载于:https://www.cnblogs.com/jiajinghai/archive/2011/11/09/2243709.html

你可能感兴趣的文章
zabbix安装源
查看>>
Eclipse+kafka集群 实例源码
查看>>
3171. [TJOI2013]循环格【费用流】
查看>>
Vijos 1067Warcraft III 守望者的烦恼
查看>>
SQL语句
查看>>
LinkedList
查看>>
Python number
查看>>
xmpp 环境配置
查看>>
【Lv1-Lesson008】A Guide to Birthdays
查看>>
mysql source 恢复 sql数据time_zone报错 已解决
查看>>
ubuntu 16.04 安装 Matlab R2016b后启动出现的问题
查看>>
MySQL_PHP学习笔记_2015.04.19_PHP连接数据库
查看>>
关于RFC
查看>>
juery 选择器 选择多个元素
查看>>
【新手向】TensorFlow 安装教程:RK3399上运行谷歌人工智能
查看>>
01-学习前说明
查看>>
Oracle Net Configuration(监听程序和网络服务配置)
查看>>
c语言_判断例子
查看>>
ubuntu重启不清除 /tmp 设置
查看>>
面向对象
查看>>