目前动态内存分配在C和C ++中有所不同吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

就各自的语言标准而言,C只通过malloc()家庭提供动态内存分配,而C ++则通过C ++执行最常见的分配形式::operator new()

它仅仅是一个简单的包装器malloc(),还是因为与典型的C程序相比,典型的C ++程序存在相当不同的内存分配行为,从根本上实现了它?

对于像GCC这样的编译器来说,只需要一个单独的核心分配实现并将其用于所有相关语言就很容易,所以我想知道是否在细节上存在差异,试图优化每种语言的结果分配性能。

提问于
用户回答回答于

以下是使用的实现g++ 4.6.1

_GLIBCXX_WEAK_DEFINITION void *
operator new (std::size_t sz) throw (std::bad_alloc)
{
  void *p;

  /* malloc (0) is unpredictable; avoid it.  */
  if (sz == 0)
    sz = 1;
  p = (void *) malloc (sz);
  while (p == 0)
    {
      new_handler handler = __new_handler;
      if (! handler)
#ifdef __EXCEPTIONS
        throw bad_alloc();
#else
        std::abort();
#endif
      handler ();
      p = (void *) malloc (sz);
    }

  return p;
}

这可以在libstdc++-v3/libsupc++/new_op.ccg ++源代码发行版中找到。

正如你所看到的,这是一个相当薄的包装malloc

用户回答回答于

在大多数实现中operator new()只是调用malloc()。当然operator new,如果你想要更好的表现,你可以实现你自己的,通常是一个类,但默认通常只是调用malloc()

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励