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


    1,new是操作符,malloc是函数;

    2,new开辟内存失败抛出异常,malloc申请内存失败返回NULL;

    3,new开辟的内存大小不需要指定,malloc需要指定;

    4,new开辟的内存的类型会自动推导,不需要强转,malloc需要强转;

    (小型操场)

    5,实现原理:

    new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。

    new->malloc->构造函数->delete->析构函数->free;

    malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。所以malloc没有初始化功能,需要用户自己初始化。(只能申请内存,不能初始化)

    malloc原理:

    malloc函数用于动态分配内存。为了减少内存碎片和系统调用的开销,malloc采用内存池的方式,先从内核态申请大块内存作为堆区,然后将堆区分为多个内存块,放在用户态的内存池中。当用户申请内存时直接从用户态的内存池堆分配一块合适的空闲块,就不需要进入内核态申请内存,除非内存池中的内存已经用完。

    malloc在申请内存时,一般会通过brk或者mmap系统调用来进行内存申请。其中当申请内存小于128k时,会使用系统函数brk在堆区分配;而当申请内存大于等于128k时,会使用系统函数mmap在映射区分配。

    new和malloc申请的是虚拟地址还是内存地址

    堆----》虚拟地址

    free后的内存会归还操作系统吗---brk和mmap的区别

    free怎么知道要释放多大的内存

  • 相关阅读:
    2023年英语二大作文押题猜想(达立易考)
    K8S简单学习
    【操作系统】文件管理
    Python趣味入门9:函数是你走过的套路,详解函数、调用、参数及返回值
    ORACLE 特殊日期时间转换,计算
    【C语言】职工管理系统详解(文件操作)
    Cookie使用详解
    Speedoffice(excel)如何将号码快捷分段显示
    聊聊计算机之Intel CPU的MESI协议
    flask配置SSL证书,实现https服务
  • 原文地址:https://blog.csdn.net/m0_60274660/article/details/127444738
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号