跳到主要内容

简述new 和 delete 的实现原理,delete 是如何知道释放内存的大小的额 ?

参考答案:

newdelete 是 C++ 中用于动态内存分配和释放的运算符。它们的实现原理主要涉及到操作系统的内存管理机制。

new 的实现原理

new 运算符在 C++ 中用于动态地分配内存。当你使用 new 分配内存时,实际上会发生以下步骤:

  1. 调用 operator new 函数new 运算符会调用一个名为 operator new 的函数。这个函数负责从操作系统那里获取适当大小的内存块。
  2. 调用构造函数:一旦 operator new 成功地从操作系统获取了内存,new 运算符会调用对象的构造函数来初始化这块内存。

delete 的实现原理

delete 运算符用于释放之前通过 new 分配的内存。当你使用 delete 释放内存时,实际上会发生以下步骤:

  1. 调用析构函数:首先,delete 运算符会调用对象的析构函数,以执行任何必要的清理工作。
  2. 调用 operator delete 函数:接下来,delete 运算符会调用一个名为 operator delete 的函数。这个函数负责将内存块返回给操作系统,以便其他程序或代码可以使用。

delete 是如何知道释放内存的大小的

delete 运算符知道要释放多少内存,这是因为它与 new 运算符紧密相关。当你使用 new 分配内存时,它会记录分配了多少内存,并且这个信息会被存储在返回的内存地址的某个位置(通常是紧接着内存块之后)。delete 运算符在释放内存时会查找这个信息,从而知道要释放多少内存。

这种机制是由 C++ 的运行时库实现的,对于程序员来说是透明的。当你使用 newdelete 时,你不需要关心这些底层的细节。

需要注意的是,如果你使用自定义的 operator newoperator delete,那么你需要自己管理这些内存分配和释放的细节。此外,使用智能指针(如 std::unique_ptrstd::shared_ptr)可以帮助自动管理内存,避免手动调用 newdelete 所带来的潜在问题。