扩展阅读
  • 我想动态申请一块内存,然后在释放这块内存,应该怎么做,在线等!
  • 内存映射设备后,就可以直接访问设备的片内内存 了(比如显卡的显存)?
  • 我执行top命令,显示出来所有进程占内存都不超过1%,可是512M内存只剩30多M,为什么?
  • 用top命令查看一个进程,虚拟内存一直不变,但物理内存每时5s增长12k或20k.
  • 应用层malloc内存后,再free的话,内存不释放,而是在exit时释放,这个谁知道是怎么回事?
  • 如何让linux没有到达内存瓶颈时回收内存页并占用最少资源
  • 泄漏了的内存会算在该程序占用的内存总量里面吗
  • 内存占用率达到 109% ,到底占用了多少内存?
  • 在Linux上用C语言编写的函数里面申请了一块内存,并且返回这块内存,最终它需要释放吗?
  • 请教关于linux内存管理问题,如何给定义的变量指定固定内存段
  • 我在hp服务器上装了个sco unixware7.1.3 但是内存是8G 但是我用命令查看内存
  • 内核最大可用内存是多少,怎样扩大可用内存?
  • 32位地址空间指的是虚拟内存的寻址范围,但是为什么要求物理内存大小不能大于4G?
  • 哪些内存范转是DOS占用,哪些内存是空闲的
  • 在SUSE linux下jar文档的运行,提示内存泄露,指定最大最小内存后只能在十几分钟才能打开,求各位大虾指点!
  • 求救:AIX下java进程堆内存存在大量空余,但rss内存不断增加
  • solaris 8 下有没有返回系统总物理内存和当前所使用内存大小的函数。(不是top,vmstat命令)
  • 大家好,我想问下有人用过"linux进程的内存使用解析"中推荐使用的"Ben Maurer写的perl脚本"查看内存么
  • 扩充内存和扩展内存什么区别,我概念不清,谁给讲讲啊
  • docker中文入门学习手册 iis7站长之家
  •  
    当前位置:  编程语言>c/c++

    c/c++中的内存分配 malloc 和 new介绍及相互之间的区别

     
        发布时间:2014-1-17  


        本文导语:  malloc函数 原型extern void *malloc(unsigned int num_bytes);头文件在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。功能分配长度为num_bytes字节的内存块返回...


    malloc函数

       原型

    extern void *malloc(unsigned int num_bytes);

    头文件

    在tc2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在visual c++6.0中可以用malloc.h或者stdlib.h

    功能

    分配长度为num_bytes字节的内存

    返回值

    如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象

    说明

       关于该函数的原型,在旧的版本中malloc返回的是char指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换


       c++  new用法:

       1.  开辟单变量地址空间

         1)new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.

         2)int *a = new int(5) 作用同上,但是同时将整数赋值为5

       2. 开辟数组空间

        一维: int *a = new int[100];开辟一个大小为100的整型数组空间

        二维: int **a = new int[5][6]

        三维及其以上:依此类推.

       一般用法: new 类型 [初值]

       malloc 和 new区别

        1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

      2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free.

      3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete.注意new/delete不是库函数。

      4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存

      new 是个操作符,和什么"+","-","="……有一样的地位。

      malloc是个分配内存的函数,供你调用的。

      new是保留字,不需要头文件支持。

      malloc需要头文件库函数支持。

      new 建立的是一个对象,

      malloc分配的是一块内存。

      new建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间

      malloc分配的是一块内存区域,就用指针访问好了,而且还可以在里面移动指针。

      简而言之:

      new 是一个操作符,可以重载

      malloc是一个函数,可以覆盖

      new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数

      malloc仅仅分配内存,free仅仅回收内存


    相关文章推荐:


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3