malloc 和 new 的区别总结

mallocnew 的区别总结

  1. 内存分配和初始化:

    • malloc 只分配内存,不进行初始化。
    • new 分配内存并调用构造函数进行初始化。
  2. 异常处理:

    • malloc 失败时返回 NULL
    • new 失败时抛出 std::bad_alloc 异常(除非使用 new(std::nothrow))。
  3. 类型安全:

    • malloc 返回 void*,需要强制转换为目标类型的指针。
    • new 返回正确类型的指针,不需要强制转换。
  4. 内存释放:

    • malloc 分配的内存用 free 释放。
    • new 分配的内存用 deletedelete[] 释放。

new 运算符在 C++ 中必须同时进行两个操作:

  1. 内存分配: new 为对象分配足够的内存。
  2. 对象初始化: new 调用对象的构造函数(如果是对象类型)来初始化分配的内存。

malloc 的内存分配过程

  • 分配: malloc 根据请求的大小从堆中分配内存。实际的分配过程涉及到操作系统的堆管理机制,如请求内存页,更新分配表等。

  • 管理: 内存分配器通常维护一个自由列表,跟踪可用的内存块。当有请求时,它会从这些空闲块中分配内存,或者请求操作系统提供更多的内存。

  • 合并和拆分: 为了提高效率,分配器可能会合并相邻的空闲内存块(合并),或者将大块内存拆分成多个小块(拆分)以供以后使用。

总之,mallocnew 都用于内存分配,但 new 提供了更高层次的功能,如对象初始化和异常处理。malloc 主要用于较底层的内存管理,在 C++ 中使用 new 通常更加符合语言的特性。

猜你喜欢

转载自blog.csdn.net/m0_48022770/article/details/141564117
今日推荐