码迷,mamicode.com
首页 > 编程语言 > 详细

C语言动态内存分配

时间:2016-05-15 15:23:28      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

1、new操作符和malloc函数

C++中的new操作符会隐式的考虑到分配的数据类型(与delete配合使用),表达式实例(以int类型为例)
new int[4]
malloc函数向系统申请一块指定大小的连续内存块(与free配合使用),需要一个参数来指定分配空间的字节大小,函数原型为
void* malloc(unsigned size)
表达式实例
malloc(4*sizeof(int))
malloc函数在内存的堆区中查找符合要求的内存块,若成功则做好标记表示已分配并返回指向该内存块起始字节的指针(不清理该内存块)否则返回NULL,因此使用其分配的内存前应检查该指针的有效性。其中指针有效性可用断言assert,其本质上是一种宏而非函数。它以一个布尔值为参数,然后实现类似测试的功能,如果测试结果为真,它实际上什么都不做,如果结果为假,assert会终止程序运行,然后提示程序终止的位置,此时编译器会提示包含执行代码的文件号以及终止的assert语句的行号。(基本思想:在继续执行断言以后的操作时,保证某些条件的值为真)。
 
2、calloc函数
calloc函数与malloc函数的主要差别是函数原型不同,calloc函数原型为
void* calloc(unsigned nitems, unsigned size)
其功能是分配nitems个连续的内存块,每块字节数为size。由于calloc函数实质上是分配nitems*size个字节的连续内存块,因此,calloc(nitems, size)malloc(nitems*size)功能上等同。不同于malloc函数,处理细节上,calloc函数将所分配的内存块清零。
 
3、realloc函数
函数原型
void* realloc(void *block, unsigned size)
用于动态申请内存后,空间的大小调整,该函数将释放和重新分配内存块在一次调用中完成,参数block是被释放的内存块的起始地址,参数size说明新申请的字节数,细节上,函数先判断是否可在原申请的内存空间上拓展成符合重新分配要求的新空间,若可,则执行;否则,函数在堆区中寻找符合重新分配大小的空间,若找到,则拷贝原空间存储信息的位模式到新空间,返回向该内存块起始字节的指针释放原空间,如果未找到符合要求的空间,realloc返回NULL不释放原空间。

C语言动态内存分配

标签:

原文地址:http://www.cnblogs.com/blogforTomSminth/p/5495158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!