全局非抛出 ::operator new 和 std::malloc 的区别

Difference between global non-throwing ::operator new and std::malloc(全局非抛出 ::operator new 和 std::malloc 的区别)

本文介绍了全局非抛出 ::operator new 和 std::malloc 的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

C++ 有几个函数来获取动态存储,其中大多数在一些基本方式上有所不同.操作系统通常会添加更多.

C++ has several functions to acquire dynamic storage, most of which differ in some fundamental way. Several more are usually added by the OS.

由于它们的可移植性和相似性,其中两个特别有趣:malloc::operator new.

Two of these are of special interest due to their portability and similarity: malloc and ::operator new.

全局 void* operator new(size_t, ::std::nothrow&)void* malloc(size_t)<之间有什么区别吗?/代码>?

Are there any differences (w.r.t. the standard and implementation) between the global void* operator new(size_t, ::std::nothrow&) and void* malloc(size_t)?

由于我所说的似乎有些混乱,请考虑以下两个调用:

Since there seems to be some confusion what I am talking about, consider the following two calls:

void* p = ::std::malloc(10);
void* q = ::operator new(10, ::std::nothrow);

明显而微不足道的区别是如何释放内存:

The obvious and trivial difference is how to deallocate the memory:

::std::free(p);
::operator delete(q);

注意:这个问题不是例如的重复new/delete 和 malloc/free 有什么区别? 因为它谈到使用 global operator new 实际上并不执行任何 ctor 调用.

Note: This question is not a duplicate of e.g. What is the difference between new/delete and malloc/free? since it talks about using the global operator new that does not actually perform any ctor calls.

推荐答案

除了语法和 freedelete 之外,主要区别是

The main differences, aside from syntax and free vs. delete, are

  1. 你可以便携地替换 ::operator新的;
  2. malloc 带有 realloc,对于 new 没有等效项;
  3. new 具有 的概念new_handler,没有对应的 malloc.
  1. you can portably replace ::operator new;
  2. malloc comes with realloc, for which new has no equivalent;
  3. new has the concept of a new_handler, for which there is no malloc equivalent.

(替换 malloc 会打开一个 蠕虫病毒.它可以完成,但不可移植,因为它需要链接器的知识.)

(Replacing malloc opens up a can of worms. It can be done, but not portably, because it requires knowledge of the linker.)

这篇关于全局非抛出 ::operator new 和 std::malloc 的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:全局非抛出 ::operator new 和 std::malloc 的区别

基础教程推荐