Diferencia entre operador global new y malloc

C ++ tiene varias funciones para adquirir almacenamiento dinámico, la mayoría de las cuales difieren de alguna manera fundamental. El sistema operativo suele agregar varios más.

Dos de estos son de especial interés debido a su portabilidad y similitud:malloc y::operator new.

¿Hay alguna diferencia (w.r.t. el estándar y la implementación) entre el globalvoid* operator new(size_t, ::std::nothrow&) yvoid* malloc(size_t)?

Dado que parece haber algo de confusión de lo que estoy hablando, considere las siguientes dos llamadas:

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

La diferencia obvia y trivial es cómo desasignar la memoria:

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

Nota: Esta pregunta no es un duplicado de p. Ej.¿Cuál es la diferencia entre new / delete y malloc / free? ya que habla de usar elglobal operator new que en realidad no realiza ninguna llamada ctor.

Respuestas a la pregunta(3)

Su respuesta a la pregunta