gpt4 book ai didi

c++ - new/delete 和 malloc/free 有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:19 28 4
gpt4 key购买 nike

new/deletemalloc/free有什么区别?

相关(重复?):In what cases do I use malloc vs new?

最佳答案

new/delete

  • 分配/释放内存
    1. 从“免费商店”分配的内存。
    2. 返回一个完全类型化的指针。
    3. new (标准版)从不返回 NULL (将抛出失败)。
    4. 使用 Type-ID 调用(编译器计算大小)。
    5. 有明确处理数组的版本。
    6. 重新分配(以获得更多空间)没有直观地处理(因为复制构造函数)。
    7. 他们是否调用 malloc/free是否定义了实现。
    8. 可以添加一个新的内存分配器来处理低内存(std::set_new_handler)。
    9. operator new/operator delete可以合法地覆盖。
    10. 用于初始化/销毁对象的构造函数/析构函数。

malloc/free

  • 分配/释放内存
    1. 从“堆”分配的内存。
    2. 返回 void* .
    3. 返回 NULL失败时。
    4. 必须以字节为单位指定所需的大小。
    5. 分配数组需要手动计算空间。
    6. 重新分配更大的内存块很简单(无需担心复制构造函数)。
    7. 他们不会调用new/delete .
    8. 无法将用户代码拼接到分配序列中以帮助解决低内存问题。
    9. malloc/free不能被合法覆盖。

功能表比较:

<表类="s-表"><头>特征 new/ delete malloc/ free <正文>内存分配自'免费商店''堆'返回全类型指针 void* 失败时抛出(从不返回 NULL )返回 NULL 要求大小由编译器计算必须以字节为单位指定处理数组有明确的版本需要人工计算重新分配没有直观地处理简单(无拷贝构造函数)反向调用实现定义没有低内存情况可以添加一个新的内存分配器不被用户代码处理可覆盖是没有构造函数/析构函数的使用是没有

从技术上讲,内存由 new 分配来自“免费商店”,而内存由 malloc 分配来自“堆”。这两个区域是否相同是一个实现细节,这是malloc的另一个原因。和 new不能混用。

关于c++ - new/delete 和 malloc/free 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7495168/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com