Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标准C++的哪些部分将调用MalOC/FILL而不是NeX/DELATE? C++实现任意使用OS提供的系统调用。所以你所有3个问题的答案都是:不 >在编译器的ABI的C++特定部分的实现中使用MalOC与NeV: 我认为您可以假设C++特定的实现将为任何分配器实现使用新的或放置新的。 如果这些列出的方法使用新的最不可能或MALOC内部分配内存,对于C++标准库实现的用户来说并不重要。_C++_Malloc_Free - Fatal编程技术网

标准C++的哪些部分将调用MalOC/FILL而不是NeX/DELATE? C++实现任意使用OS提供的系统调用。所以你所有3个问题的答案都是:不 >在编译器的ABI的C++特定部分的实现中使用MalOC与NeV: 我认为您可以假设C++特定的实现将为任何分配器实现使用新的或放置新的。 如果这些列出的方法使用新的最不可能或MALOC内部分配内存,对于C++标准库实现的用户来说并不重要。

标准C++的哪些部分将调用MalOC/FILL而不是NeX/DELATE? C++实现任意使用OS提供的系统调用。所以你所有3个问题的答案都是:不 >在编译器的ABI的C++特定部分的实现中使用MalOC与NeV: 我认为您可以假设C++特定的实现将为任何分配器实现使用新的或放置新的。 如果这些列出的方法使用新的最不可能或MALOC内部分配内存,对于C++标准库实现的用户来说并不重要。,c++,malloc,free,C++,Malloc,Free,本MSDN文章列出了调用malloc/free而不是new/delete的几种情况: 我想知道这个列表是否按善良的递增顺序和可能性的递减顺序排列: 对于其他常见实现,则为True 详尽的 由C++标准的某些部分保证 上下文是我想替换全局新建/删除,我想知道如果我这样做了,我会错过什么分配。Calloc和malloc比new和delete低得多。首先,malloc和calloc是不安全的,因为您可以随意使用cast-on类型,并且对内存中的数据的访问是不受控制的。如果你在做一些真正的低级编程,你

本MSDN文章列出了调用malloc/free而不是new/delete的几种情况:

我想知道这个列表是否按善良的递增顺序和可能性的递减顺序排列:

对于其他常见实现,则为True 详尽的 由C++标准的某些部分保证
上下文是我想替换全局新建/删除,我想知道如果我这样做了,我会错过什么分配。

Calloc和malloc比new和delete低得多。首先,malloc和calloc是不安全的,因为您可以随意使用cast-on类型,并且对内存中的数据的访问是不受控制的。如果你在做一些真正的低级编程,你可能最终会在别人的内存中写东西,你将不得不使用malloc和calloc。如果你是一个普通的程序员,只需使用new和delete就可以了。为什么需要精确的实施?我必须说实现取决于很多不同的实现,因为有很多不同的实现,一个新的实现基本上是一个包装的malloc。编译器可以随意使用stdio函数,例如,如果您尝试实现自己的memcpy,就会得到一些奇怪的递归。如果编译器看到您复制的数量超过一定数量,比如说一个哑位对位复制构造函数,它将使用memcpy

是的,new是一种谎言,new意味着分配一些内存并在那里构造一些东西,让我把它写成一件事,如果你分配一个浮点数组,比如说,它们是未初始化的,malloc可能会被直接使用

注意,我可能会说,我不确定这些天它们是否设置为零:p

无论如何,所有编译器优化的cept copy elisioning和其他返回值优化的东西-但这是唯一一个你看不见的例外,这就是重点。程序无法判断它是否经过了优化,你必须对它进行计时。例如:

(x*10)/2
如果编译器不知道x的范围,这将不会得到优化,因为x*10可能会溢出,但x*5可能不会。因此,如果它进行了优化,就会改变结果

if(x>0 && x<10) {
    (x*10)/2
} 
将变成x*5,因为编译器非常聪明,而且认为x*10不可能溢出,所以x*5是安全的

如果定义了全局新/删除,编译器将无法优化,因为它无法知道这样做不会产生任何效果。如果你定义了自己的一切,那么简化为malloc/free的一切都将消失

注:_

我故意忽略了malloc和type saftey的内容。这不相关

编译器假设malloc、free、memcpy等都是超级优化的,并且只在安全的地方使用它们——如上所述。邮件列表上有一个GCC线程,我在那里知道了memcpy的事情

我想知道这个列表是否按善良的递增顺序和可能性的递减顺序排列:

<>我想说,你不能真正地从我的评论中给出一个比C++更容易使用的C++实现。p>

C++实现任意使用OS提供的系统调用。所以你所有3个问题的答案都是:不

>在编译器的ABI的C++特定部分的实现中使用MalOC与NeV: 我认为您可以假设C++特定的实现将为任何分配器实现使用新的或放置新的。 如果这些列出的方法使用新的最不可能或MALOC内部分配内存,对于C++标准库实现的用户来说并不重要。 注: 如果您是在计划覆盖new的背景下提出要求,或者使用placement new为程序上下文中的所有内存分配提供自己的内存分配机制:这不是办法!


然后,您必须提供自己的malloc、free等版本。例如,当将GCC与newlib结合使用时,可以使用适当的存根。

一般来说,我会始终避免使用malloc/free。Malloc/free只对POD起作用,但如果你想用更强大的东西来取代你的POD,你将经历一段艰难的旅程。Malloc /免费是C呼叫,而不是C++呼叫。@ MaistCeNeDeSeRAMS听起来好像你完全错过了OPS问题。你是不是想链接一个不同的文章?在文章链接中,没有任何地方使用MalC/C++来代替C++编写的代码的新/删除。除非您参考的是该表,该表是使用malloc/free的C运行时函数的列表。如果是这样,您对C标准感兴趣,而不是C++标准。我想您是指注释部分中的C库函数列表。C++库中没有任何指定使用MalOC,尽管默认运算符new可能。@ BeHyMeS然后检查我的答案中的Note。NeXo做的更多,然后MALOC,如果我们忽略了人们可以重载新的事实。
是的,它构造了这样的东西。它是一个围绕malloc的包装器,在某个时候它会向操作系统请求内存。我不确定这是如何回答这个问题的,对不起。编译器可以随意使用stdio函数,如果stdio是一个打字错误,那么几乎在所有方面都是绝对不允许的——你是说C标准库吗?@BenHymers完全正确,我是说stdlib。memcpy居住的地方@BenHymers基本上,你的问题不适用,没有三个级别,标准状态优化可能不会改变程序状态,因此在乘法示例中,除非你做一些未定义的事情,否则编译器不会有乐趣。最快的就是它可能做的事情。编译器非常清楚什么是未定义的,什么不是未定义的。如果编译器能够证明某个东西没有副作用,并且只有这样它才能优化构造函数的cept,请参见RVO-only EXCEPTION,如果你有自己的新东西做东西,它做的东西就是副作用!谢谢我怀疑答案可能是否定的。除非有人从标准中获得一些保证,否则我会接受这个答案。另外,在我们讨论这个问题时,你有没有关于如何覆盖malloc和free的好资源?正如我理解的那样,重写新的和删除的原因是它被标准所允许,而Maloc和Delphi必须使用特定于平台的欺骗来替换。@ BeHyMeSes是的,这取决于您的特定C++编译器和OS的ABI。如果您使用的是GCC和newlib,最简单的方法可能只是提供您自己的malloc/free实现,并在libs允许使用多个链接器符号之前将它们链接到第一位。理想情况下,您可以完全控制您的工具链,即自己构建工具链。我真的不知道windows似乎是你的目标操作系统,但MingWGCC是可用的。否则专门针对newlib可能会有所帮助。@BenHymers找到了s.th。这可能会使您进入windows的轨道:。没有一个答案被接受,但它似乎包含了一个可行的解决方案。谢谢-第二个链接确实有用!这有助于证明替换malloc很麻烦:我想我现在会坚持替换新的,因为它更简单,例如,请参见此处:,而且它似乎将占我程序中大部分的分配。我将确保监控进程内存使用情况,并将其与我收集的数据进行比较,以确保没有太多的非新分配内存丢失。
1. True for other common implementations
2. Exhaustive
3. Guaranteed by some part of the C++ standard