malloc函数具体解释

malloc函数具体解释

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

一、原型:extern void *malloc(unsigned int num_bytes);

头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是全然一致的。)

功能:分配长度为num_bytes字节的内存块

说明:假设分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

当内存不再使用时,应使用free()函数将内存块释放。

 

举例:

 

 

二、函数声明(函数原型):

  void *malloc(int size);

  说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型能够强制转换为不论什么其他类型的指针。这个在MSDN上能够找到相关的解释,详细内容例如以下:

     

malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. To return a pointer to a type other than void, use a type cast on the return value. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item. Always check the return from malloc, even if the amount of memory requested is small.

三、malloc与new的不同点

  从函数声明上能够看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,而且能够自己主动计算所须要大小。比方:

      int *p;

  p = new 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 * 类型变量”。所以必须通过 (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得到指针,在其他操作上保持一致。

 

 总结:

malloc()函数事实上就在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量能够是一个单独的指针,也能够是一个数组的首地址,这要看malloc()函数中參数size的详细内容。我们这里malloc分配的内存空间在逻辑上连续的,而在物理上能够连续也能够不连续。对于我们程序猿来说,我们关注的是逻辑上的连续,由于操作系统会帮我们安排内存分配,所以我们使用起来就能够当做是连续的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118351.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数独答案查询器_8阶数独

    数独答案查询器_8阶数独数独是一种传统益智游戏,你需要把一个 9×9 的数独补充完整,使得图中每行、每列、每个 3×3 的九宫格内数字 1∼9 均恰好出现一次。请编写一个程序填写数独。输入格式输入包含多组测试用例。每个测试用例占一行,包含 81 个字符,代表数独的 81 个格内数据(顺序总体由上到下,同行由左到右)。每个字符都是一个数字(1−9)或一个 .(表示尚未填充)。您可以假设输入中的每个谜题都只有一个解决方案。文件结尾处为包含单词 end 的单行,表示输入结束。输出格式每个测试用例,输出一行数据,代表填充

    2022年8月8日
    5
  • 汇编语言中各种移位指令的区别与联系

    汇编语言中各种移位指令的区别与联系本文转载自:https://blog.csdn.net/richerg85/article/details/27558005SHL、SHR、SAL、SAR:移位指令;SHL(ShiftLeft):   逻辑左移;SHR(ShiftRight):   逻辑右移;SAL(ShiftArithmeticLeft):算术左移;SAR(Shift…

    2022年6月9日
    22
  • 四旋翼飞行器图片(4轴飞行器飞行运动中有)

    1、未知区域地形的构建2、农业方面的应用:(1)运用图像识别技术检测果实数量;(2)检测作物是否发生病虫害,因为当作物出现病虫害时都会有相应的表现现状。具体见链接http://www.aiweibang.com/yuedu/153474153.html3、高层建筑物的搭建

    2022年4月15日
    45
  • linux系列之常用运维命令整理笔录

    本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新free-m其中:m表示兆,也可以用g,注意都要小写Men:表示物理内存统计total:表示物理内存总数(total=used+free)use…

    2022年4月7日
    38
  • 密码找回

    密码找回

    2021年5月10日
    132
  • 查看Linux系统版本信息

    查看Linux系统版本信息扫码关注获取更多IT知识在使用Linux操作系统的时候,有时候会需要了解当前使用的系统版本信息,特别是在给别人进行服务器部署运维的时候,准确的系统版本信息至关重要,今天明月就给大家分享几个获取Linux系统版本信息的命令。一、查看Linux内核版本命令(两种方法):1、cat/proc/version[root@S-CentOShome]#cat/proc/versionLinuxversion2.6.32-431.el6.x86_64(mockbuild@c6b8.bsys.

    2022年6月5日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号