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
。