无效* malloc(int size);
描述: malloc适用于系统分配指定大小的字节的内存空间. 返回类型为void *. void *表示类型不确定的指针. C,C ++规定void *类型可以强制转换为任何其他类型的指针.
可以从函数声明中看到. malloc和new之间至少有两个区别: new返回指定类型的指针,并且可以自动计算所需的大小. 例如:
int * p;
p =新的int; //返回类型为int *类型(整数指针),分配大小为sizeof(int);
或者:
int * parr;
parr = new int [100]; //返回类型为int *类型(整数指针),分配大小为sizeof(int)* 100;
Malloc必须由我们计算,并且在转换之后,它会被强制转换为实际类型的指针.
int * p;
p =(int *)malloc(sizeof(int));
首先,malloc函数返回一个void *类型. 如果您写: p = malloc(sizeof(int));则无法编译程序并报告错误: “无法将void *分配给int *类型变量”. 因此
第二,该函数的实际参数是sizeof(int),用于指示整数数据的大小. 如果您写:
int * p =(int *)malloc(1);
也可以编译代码,但是实际上,只分配了1个字节的内存空间. 当您在其中存储一个整数时,将有3个字节的无家可归,并直接“居住在”邻居中!”结果是清除了后续存储器中的所有原始数据内容.
malloc还可以达到new []的效果,申请一个连续的内存,该方法只是指定所需的内存大小.
例如,如果您要分配100个int类型的空间:
int * p =(int *)malloc(sizeof(int)* 100); //分配可以容纳100个整数的内存空间.
无法直接看到的另一点是,malloc仅分配内存,而无法初始化结果内存,因此在获得的新内存中,其值将是随机的.
除了分配和最终释放的不同方法外,还可以通过malloc或new获取指针,并使其在其他操作中保持一致.
============================================
原型: extern void * malloc(unsigned int num_bytes);
用法: #include
或#include
功能: 分配长度为num_bytes个字节的内存块
描述: 如果分配成功,则返回指向已分配内存的指针,否则返回空指针NULL.
当不再使用内存时,应使用free()函数释放内存块.
malloc的语法是: 指针名=(数据类型*)malloc(长度)calloc头文件,(数据类型*)表示指针.
示例:
// malloc.c
#include
#include
main()
{
字符* p;
clrscr(); //清除屏幕
p =(char *)malloc(100);
if(p)
printf(“内存分配在: %x”,p);
其他
printf(“内存不足!\ n”);
free(p);
getchar();
返回0;
}
============================================
malloc()函数的工作机制
malloc函数的本质是它具有一个所谓的空闲列表,该空闲列表将可用的内存块连接到一个长列表中. 调用malloc函数时,它将在连接表中查找足以满足用户请求的内存块. 然后,将存储块分为两部分(一个块的大小等于用户请求的大小,另一个块的大小为剩余字节). 接下来,将分配给用户的内存传递给用户,然后将剩余的内存(如果有)返回到连接表. 调用free函数时,它将用户释放的存储块连接到free链. 最后,自由链将被切成许多小内存片段. 如果用户此时申请较大的内存碎片,则自由链上可能没有满足用户要求的碎片. 因此,malloc函数请求一个延迟,并开始检查自由链上的内存片段,对它们进行排序,然后将相邻的较小的空闲块合并为较大的内存块.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-254195-1.html