C++ C++;新操作符是否在下面使用malloc()?

C++ C++;新操作符是否在下面使用malloc()?,c++,C++,换句话说,它是否每次调用时都执行malloc()syscall?(可能通过提前分配一大块) 换句话说,它是否每次调用时都执行malloc()syscall 它实际上依赖于实现。但是new的实现通常会使用malloc()syscalls/c-library绑定 (可能通过提前分配一大块) 是的,你必须考虑这是一个缺点。经常打电话 char* newChar = new char(); 分配的块比单个char所需的块大,可能会不必要地使动态存储空间混乱 如果您想覆盖该行为以实现更高效的内存管理,您

换句话说,它是否每次调用时都执行
malloc()
syscall?(可能通过提前分配一大块)

换句话说,它是否每次调用时都执行
malloc()
syscall

它实际上依赖于实现。但是
new
的实现通常会使用
malloc()
syscalls/c-library绑定

(可能通过提前分配一大块)

是的,你必须考虑这是一个缺点。经常打电话

char* newChar = new char();
分配的块比单个
char
所需的块大,可能会不必要地使动态存储空间混乱


如果您想覆盖该行为以实现更高效的内存管理,您可以始终使用。

正如其他人所说,这是实现定义的。但是,我认为,一个高性能的C++实现可能不使用MalCube(),而是使用OS特定的内存分配API或系统调用(MalCube()必须自己使用)。毕竟,为什么要在每个内存分配中添加一个额外的函数调用呢?但是我没有确凿的证据证明这一点。

在C++14之前,标准禁止实现组合分配。因此,每个
新的
表达式确实与对某个系统分配函数的调用一一对应(可能是
malloc


在某些情况下是C++14。现在,如果一个的生存期严格地在另一个的生存期内,那么实现就可以合并分配。但这是一个相当狭窄的限制,所以我希望分配实际上不会经常合并。

我想这取决于实现。malloc不是一个系统调用,它是标准C库中的一个函数。@Neil采用了它。@πάνταῥεῖ 您对标题的编辑似乎改变了问题的意图。我不认为OP问的是这个问题。OP问的是呼叫
operator new
是否与
malloc
呼叫一一对应,而不是它是否使用
malloc