码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C和C++区别联系


    malloc,free && new,delete

    malloc()和free()是C语言中动态申请内存和释放内存的标准库中的函数。而new和delete是C++运算符、关键字。new和delete底层其实还是调用了malloc和free。它们之间的区别有以下几个方面:

    1)malloc和free是函数,new和delete是运算符。

    2)malloc在分配内存前需要大小,new不需要。

    例如:int *p1 = (int *)malloc(sizeof(int));

           int *p2 = new int;     //int *p3 = new int(10);
    
    • 1

    malloc时需要指定大小,还需要类型转换。new时不需要指定大小因为它可以从给出的类型判断,并且还可以同时赋初始值。

    3)malloc不安全,需要手动类型转换,new不需要类型转换。

    4)free只释放空间,delete先调用析构函数再释放空间(如果需要)。

    与第⑤条对应,如果使用了复杂类型,先析构再call operator delete回收内存。

    5)new是先调用构造函数再申请空间(如果需要)。

    与第④条对应,我们在调用new的时候(例如int *p2 = new int;这句代码 ),底层代码的实现是:首先push 4字节(int类型的大小),随后call operator new函数分配了内存。由于我们这句代码并未涉及到复杂类型(如类类型),所以也就没有构造函数的调用。如下是operator new的源代码,也是new实现的重要函数:

    我们可以看到,首先malloc(size)申请参数字节大小的内存,如果失败(malloc失败返回0)则进入判断:如果_callnewh(size)也失败的话,抛出bad_alloc异常。_callnewh()这个函数是在查看new handler是否可用,如果可用会释放一部分内存再返回到malloc处继续申请,如果new handler不可用就会抛出异常。
    6)内存不足(开辟失败)时处理方式不同。

    malloc失败返回0,new失败抛出bad_alloc异常。

    7)new和malloc开辟内存的位置不同。

    malloc开辟在堆区,new开辟在自由存储区域。

    8)new可以调用malloc(),但malloc不能调用new。

    new就是用malloc()实现的,new是C++独有malloc当然无法调用。

    涉及类的C都没有

    函数重载…

    C++中const修饰的可以作为常量来给数组分配空间

    强弱类型语言是相对的,C++相对C是强类型,必须先定义数据类型再给值,但他又可以进行一些不同数据类型之间的自动转换,char和int

    https://blog.csdn.net/tonglin12138/article/details/94555183?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165936329816782425149984%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165936329816782425149984&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-94555183-null-null.142v37pc_search_v2&utm_term=%E9%9D%A2%E8%AF%95C%E5%92%8CC%2B%2B&spm=1018.2226.3001.4187

  • 相关阅读:
    k8s named Kubernetes
    剑指offer——JZ24 反转链表 解题思路与具体代码
    mybatis的一级缓存和二级缓存
    flume 通过syslog协议读取系统日志
    分类问题和回归问题的区别是什么?
    对于BP算法全矩阵传播及偏置项的一些理解
    Java数据结构算法:算法的空间复杂度分析
    Linux进程控制
    JVM常见面试题及详解
    网络编程day6——基于C/S架构封装的线程池
  • 原文地址:https://blog.csdn.net/m0_46663240/article/details/126111151
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号