malloc() / free() 与 new / delete

前言

malloc()free()是C语言中使用的内存分配和内存释放库函数
newdelete是C++种使用的内存分配和内存释放运算符
本文,从两组函数的机制讲述两组概念的区别于联系。

使用方法

malloc()free()

函数原型:
void *malloc(size_t size);
void *calloc(size_t nmemb, size_t size);
void *realloc(void *ptr, size_t size);
void free(void *ptr);

  • 函数解释
    malloc()函数分配size大小的未初始化的内存。并返回指向该内存首地址的指针。如分配异常,返回空指针
    calloc()函数分配nmemb个长度为size的连续空间。
    realloc()函数将ptr指向的指针,重新分配大小为size

    free()函数malloc()等三个函数分配的内存,其输入参数即使malloc()返回的指针。
    如果 malloc()中,传入的参数size == 0,则该函数返回NULL或者unique pointer value

  • 函数原理
    malloc一般从中申请空间(请参考操作系统相关的知识)。如果申请的内存大于MMAP_THRESHOLD(默认为128kB,可以用mallopt(3)设置),则**使用mmap(2)匿名映射完成内存分配。

  • 使用注意事项

    1. 分配了之后,检查是否分配成功
    2. 使用之后,必须释放
    3. 只能释放一次,破坏其他数据

newdelete

同样是从中分配动态内存。
new会调用构造函数对对象进行初始化,且不需要指定分配内存的大小,如分配异常,抛出bad_malloc异常。
delete会调用析构函数

newdelete最终都会调用mallocfree

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值