And*_*rei 11 c c++ performance memory-management
我计划参与开发用C语言编写的代码,用于蒙特卡罗对复杂问题的分析.这段代码在内存中分配了巨大的数据数据以加速其性能,因此代码的作者选择了C而不是C++声称可以用C做出更快更可靠(关于内存泄漏)的代码.
你同意吗?如果您需要在计算期间将4-16 GB的数据阵列存储在内存中,您会选择什么?
Jer*_*fin 23
绝对是C++.默认情况下,两者之间没有显着差异,但 C++提供了一些C没有的东西:
最重要的是,在这方面,C绝对没有提供比C++更优势的可能性.在最糟糕的情况下,您可以以相同的方式完成相同的事情.
C99中有一个功能,它不存在于C++中,并且可能会在繁重的数字运算代码中显着提高速度,这就是关键字restrict.如果您可以使用支持它的C++编译器,那么在优化时您可以在套件中使用额外的工具.但这只是一个潜在的收获:足够的内联可以允许相同的优化restrict.它也与内存分配无关.
如果代码的作者能证明分配4-16GB阵列,那么C和C++代码之间的性能差异(一)我很惊讶,但OK,有区别,和(b)有多少次被程序会分配这么大的数组?您的程序实际上是否会花费大量时间来分配内存,还是花费大部分时间来访问内存和进行计算?与分配时间相比,使用4GB阵列实际执行任何操作需要很长时间,这意味着您应该担心"任何事情"的性能,而不是分配的性能.短跑运动员非常关心他们下车的速度有多快.马拉松运动员,不是那么多.
您还必须小心如何进行基准测试.你应该比较malloc(size)一下new char[size].如果您测试malloc(size)对new char[size]()那么它是不公平的比较,因为后者将内存为0,前者没有.对比较calloc代替,还要注意malloc和calloc都可以从C++中(不可能),他们证明可测量更快.
但是,最终,如果作者"拥有"或启动了该项目,并且更喜欢用C而不是C++编写,那么他不应该用可能虚假的性能声明来证明这个决定,他应该通过说"我更喜欢C"来证明这一点. ,这就是我正在使用的".通常,当有人就这种语言表现做出这样的声明,并且结果证明测试不是真的时,您会发现表现并不是语言偏好的真正原因.证明声明错误实际上不会导致该项目的作者突然开始喜欢C++.
| 归档时间: | 
 | 
| 查看次数: | 7433 次 | 
| 最近记录: |