欢迎来金海湾博客
Albert116

https://blog.jinbay.com/Albert116/  复制链接收藏

Albert116个人头像
Albert116
博客日历
«November 2024»
12
3456789
10111213141516
17181920212223
24252627282930
博客自定义分类
5/14/2009 10:44:00 AM [语言学习] 分享

分享

原型: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>  阅读全文>>

评论

分享 分享

对话:

我要刊登广告
我要刊登广告
5/14/2009 2:41:00 PM [美食-旅游] 分享

分享

 偷得浮生一日闲,跑到车展看得不亦乐乎,展台上的新车层出不穷,模特只能用一个词来形容:今年模特非常美,乱花渐欲迷人眼!走出车展让你觉得街上再无美女了。小生不才,怀着对对上海车展的崇敬之情,班门弄斧搞了个奥斯卡评奖,欢迎筒子们来拍砖!
      最一鸣惊人模特大奖:众泰展台 09上海最嫩车模(4岁)

众泰的创意够大胆,似乎一个只有4岁的小模特,是整个车展年龄最小的模特了,影响力极大,只要她一上展台必有众多记者狂拍           最爷们车型奖:东风展台迷彩战车配肌肉男
本届车展最爷们的车型就是我们的东风勇士,在悍马看得人早就腻歪了,也让大家瞧瞧咱中国爷们的风范        最醉人甜美笑容奖:众泰展台小美女一笑倾心,再笑倾城
看这幅照片,说得再多也不能形容这样的笑容,天

阅读(98)评论(0)

5/14/2009 10:41:00 AM [新闻时事] 分享

分享

童鞋们,今天突然发现,咱们要期末考了~~!
预计早点把咱们的策划搞定,大家好好复习,带着好心情去实践
废话不多说了~
继续写策划
大家期末考要好好考哈!!!!

阅读(62)评论(0)

© 2024 Jinbay.com All rights reserved. 版权所有金海湾。 未经许可,不得转载。