C语言 malloc realloc calloc
来源:互联网 发布:企业的域名 编辑:程序博客网 时间:2024/05/17 07:36
1 malloc
在C语言中,用到指针就会想到动态分配空间,动态分配空间最基础的就是malloc。
头文件:stdlib.h或malloc.h(realloc和calloc也一样)
void *malloc(size_t size);
功能:分配长度为num_bytes字节的内存块
返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
malloc实现:
简单来说,就是在堆上将可用的空间链接起来,形成一块块可用的空间,malloc就是找到那个空间的信息然后返回它的地址。定义了Header保存每个存储器块的信息,信息有指向下个链表的指针,当前分配的长度,还有存储器元素排在合理的字节边界上,根据系统不同,都不一样。
2 realloc
void * realloc(void *__ptr, size_t __size);
功能:更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。
如果将分配的内存减少,realloc仅仅是改变索引的信息。
如果是将分配的内存扩大,则有以下情况:
1)如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。
2)如果当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置。
3)如果申请失败,将返回NULL,此时,原来的指针仍然有效。
因为有可能分配不成功,所以关于这一点的确要注意,最好如下:
int *q;
q = (int *) realloc (p, sizeof(int) * 15);
if( ! q )
{
p = q;
}
3 calloc
void* calloc (size_t num, size_t size);
功能:calloc() 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。
跟malloc的区别:
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
一个在努力中的未来程序员,如果有更好的想法,欢迎评论。
- C语言 malloc realloc calloc
- C语言内存分配:malloc、calloc、realloc
- C语言之 malloc,realloc, calloc区别
- C语言realloc,malloc,calloc的区别
- C语言的malloc、calloc、realloc
- C语言 malloc calloc realloc 区别
- C语言内存分配--malloc、calloc、realloc
- C语言中realloc,malloc,calloc区别
- C语言:动态内存malloc,calloc,realloc
- c malloc calloc realloc
- C语言三个内存分配函数比较,malloc calloc realloc
- C语言 内存分配 (malloc/realloc/calloc区别)
- 转载:C语言内存分配:malloc、calloc、realloc
- C语言动态内存分配malloc/realloc/calloc
- C语言中alloca,calloc,malloc,free,realloc,sbrk简介
- C语言动态内存分配 malloc .calloc realloc
- [转载]C语言动态内存分配malloc/realloc/calloc
- C语言内存分配函数malloc、calloc和realloc
- 实战体验几种MySQLCluster方案
- 什么样的人适合当程序员?挺有意思的一篇文章
- 字符读取流缓冲区-读一行的方法readLine()
- 偶数求和 hd 2015
- What Is Your Grade?
- C语言 malloc realloc calloc
- 彻底理解PHP的SESSION机制
- Spring Test 整合 JUnit 4 使用总结
- hdu5726 GCD (线段树+区间gcd)
- 2016多校训练Abandoned country (最小生成树+期望)
- android中自定义attr,以及style杂谈
- 随机森立预测风险
- java③
- 如何在python中读写和存储matlab的数据文件(*.mat)