原型:extern
void *malloc(unsigned int num_bytes);</SPAN> 头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)</SPAN> 功能:分配长度为num_bytes字节的内存块</SPAN> 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。</SPAN> 当内存不再使用时,应使用free()函数将内存块释放。</SPAN> </SPAN> 举例:</SPAN> </SPAN> #include </SPAN> #include </SPAN> main()</SPAN> {</SPAN> char *p;</SPAN> clrscr();</SPAN> p=(char *)malloc(100);</SPAN> if(p)</SPAN> printf("Memory Allocated at: %x",p);</SPAN> else</SPAN> printf("Not Enough Memory!\n");</SPAN> free(p);</SPAN> getchar();</SPAN> return 0;</SPAN> }</SPAN> </SPAN> 函数声明(函数原型):</SPAN> void *malloc(int size);</SPAN> 说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。</SPAN> 从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如:</SPAN> int *p;</SPAN> p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);</SPAN> 或:</SPAN> int* parr;</SPAN> parr = new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;</SPAN> 而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。</SPAN> int* p;</SPAN> p = (int *) malloc (sizeof(int));</SPAN> 第一、malloc 函数返回的是 void * 类型,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。</SPAN> 第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。如果你写成:</SPAN> int* p = (int *) malloc (1);</SPAN> 代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容全部被清空。</SPAN> malloc 也可以达到 new [] 的效果,申请出一段连续的内存,方法无非是指定你所需要内存大小。</SPAN> 比如想分配100个int类型的空间:</SPAN> int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。</SPAN> 另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。</SPAN> 除了分配及最后释放的方法不一样以外,通过malloc或new得到指针,在其它操作上保持一致。</SPAN> 对其做一个特例补充</SPAN> char *ptr;</SPAN> if ((ptr = (char *)malloc(0)) == NULL)</SPAN> puts("Got a null pointer");</SPAN> else</SPAN> puts("Got a valid pointer");</SPAN> 此时得到的是Got a valid pointer。把0赋给malloc能得到一个合法的指针。</SPAN> malloc()函数的工作机制</SPAN> malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。</SPAN> 阅读全文>> |
偷得浮生一日闲,跑到车展看得不亦乐乎,展台上的新车层出不穷,模特只能用一个词来形容:今年模特非常美,乱花渐欲迷人眼!走出车展让你觉得街上再无美女了。小生不才,怀着对对上海车展的崇敬之情,班门弄斧搞了个奥斯卡评奖,欢迎筒子们来拍砖! 最一鸣惊人模特大奖:众泰展台 09上海最嫩车模(4岁) 众泰的创意够大胆,似乎一个只有4岁的小模特,是整个车展年龄最小的模特了,影响力极大,只要她一上展台必有众多记者狂拍 最爷们车型奖:东风展台迷彩战车配肌肉男 本届车展最爷们的车型就是我们的东风勇士,在悍马看得人早就腻歪了,也让大家瞧瞧咱中国爷们的风范 最醉人甜美笑容奖:众泰展台小美女一笑倾心,再笑倾城 看这幅照片,说得再多也不能形容这样的笑容,天 |
童鞋们,今天突然发现,咱们要期末考了~~! 预计早点把咱们的策划搞定,大家好好复习,带着好心情去实践 废话不多说了~ 继续写策划 大家期末考要好好考哈!!!! |
© 2024 Jinbay.com All rights reserved.
版权所有金海湾。 未经许可,不得转载。