我计划参与开发使用C语言编写的蒙特卡罗分析代码,该代码在内存中分配了大量数据数组以提高其性能。因此,代码的作者选择了C语言而不是C++,声称使用C语言可以编写更快速和更可靠(关于内存泄漏方面)的代码。
你同意这个观点吗?如果你需要在计算过程中存储4-16GB的数据数组,你会选择什么语言呢?
我计划参与开发使用C语言编写的蒙特卡罗分析代码,该代码在内存中分配了大量数据数组以提高其性能。因此,代码的作者选择了C语言而不是C++,声称使用C语言可以编写更快速和更可靠(关于内存泄漏方面)的代码。
你同意这个观点吗?如果你需要在计算过程中存储4-16GB的数据数组,你会选择什么语言呢?
毫无疑问是C++。默认情况下,这两者之间没有明显的区别,但是 C++提供了一些C不具备的能力:
总之,在这方面,C绝对没有比C++更好的优势。在最坏的情况下,您可以以完全相同的方式做完全相同的事情。
new
和malloc
最终都会调用brk
函数。 - Dan Andreatta在C++中,您也可以使用C系列的内存分配函数:标准的malloc
和free
,realloc
用于扩大/缩小数组,以及alloca
用于在堆栈上分配内存。
如果您选择使用new
,它将分配比所需更多的内存(主要是在调试期间),并进行额外的一致性检查。它还将为类调用构造函数。在发布(-O3
)版本中,对于大多数应用程序来说,差异将是微不足道的。
现在,new
带来的与malloc不同之处在于就地new
。您可以预先分配一个缓冲区,然后使用就地new
将结构放入该缓冲区中,从而使其“分配”变得即时。
总的来说,我不会因为性能问题而远离C。如果有什么,您的代码将更有效率,因为类通过寄存器传递this
指针,而不是像C等效果那样传递参数。远离C的真正原因是C++运行时的大小。如果您为嵌入式系统或引导加载程序开发程序,则无法嵌入约4MB的运行时。但是对于普通应用程序,这不会有任何影响。
如果您需要在计算过程中存储4-16 GB的数据数组,并且您的计算机只有2GB的物理内存,那么怎么办?
如果您的计算机有16GB的物理内存呢?操作系统是否不占用物理内存?
操作系统是否允许您使用4GB、16GB等地址空间?
我建议,如果性能是主要实现约束条件,那么了解所打算使用的平台如何运作和执行远比在相同环境和算法下C和C++之间的任何可衡量性能差异问题更为重要。