gha*_*.st 23 c++ malloc memory-management new-operator c++11
C++有几个功能来获取动态存储,其中大部分功能在某些基本方面有所不同.OS通常会添加几个.
由于它们的便携性和相似性,其中两个特别感兴趣:malloc和::operator new.
全局void* operator new(size_t, ::std::nothrow&)和void* malloc(size_t)?之间是否有任何差异(标准和实施)?
由于我所说的似乎有些混乱,请考虑以下两个调用:
void* p = ::std::malloc(10);
void* q = ::operator new(10, ::std::nothrow);
Run Code Online (Sandbox Code Playgroud)
明显和微不足道的区别在于如何释放内存:
::std::free(p);
::operator delete(q);
Run Code Online (Sandbox Code Playgroud)
注意:这个问题不重复,例如new/delete和malloc/free有什么区别?因为它谈到使用实际上不执行任何ctor调用的全局 operator new.
Fre*_*Foo 18
除了语法和freevs. 之外,主要区别delete在于
::operator new ;malloc附带realloc,new没有相应的;new有a的概念,new_handler没有malloc相应的概念.(更换会malloc打开一堆蠕虫.它可以完成,但不能移植,因为它需要知道链接器.)
我能想到的有两个区别:
您必须使用哪个函数来释放内存,operator delete与free().
C++ 程序可以合法地提供它自己的版本,::operator new并且该版本保证被new表达式调用。无法malloc使用您自己的版本进行覆盖。