首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

动态内存申请函数抉择(realloc、malloc 、alloca、 calloc)

2013-02-24 
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)1、函数realloc 例如:#include malloc.hvoid main

动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
1、函数realloc 

例如:#include <malloc.h>void main(){ char *p,*q; p = (char * ) malloc (10); q=p; p = (char * ) realloc (q,20); //A …………………………}int main(){ int *p = (int *)alloca(sizeof(int)*10); free(p);//此时不能用free()去释放,会导致错误 return 0;}
3 、calloc函数#include <stdlib.h>#include<string.h>#include <stdio.h>int main(void){ char *str = NULL; /* 分配内存空间 */ str = (char*)calloc(10, sizeof(char)); /* 将hello写入*/ strcpy(str, "Hello"); /*显示变量内容*/ printf("String is %s\n", str); /* 释放空间 */ free(str); return 0;}4、malloc函数      函数简介原型:extern void *malloc(unsigned int num_bytes);    
    功能:分配长度为num_bytes字节的内存块     返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。    说明:关于该函数的原型,在旧的版本中malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。 函数的工作机制       malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。Linux Libc6采用的机制是在free的时候试图整合相邻的碎片,使其合并成为一个较大的free空间。  

热点排行