c++ - 在繁重的模拟代码中,C++ 类/结构会比 C 数组明显慢吗

标签 c++ c arrays performance struct

由于添加了“不同级别的间接寻址”,据说创建数据类/结构比 c 数组慢,并且显然是“错误”的 here 。我已经研究模拟代码一段时间了,尽管我知道人们总是说不要预先优化,但在深入研究之前了解要使用的数据结构是至关重要的。

如果我要运行 >10,000 个主循环,其中包含 1->50 个“迷你循环”,甚至可能是 1->10 个“迷你迷你循环”(即,最多可以有约 10,000,000 个循环)总计),将我的所有数据保存在 C 代码中会有好处吗?或者速度上的差异是否足够小,以至于我可以利用类来避免编写一个大的 c 文件?

最佳答案

除非您使用虚函数或虚基类,否则生成的代码应该绝对没有区别。在 C++ 中,类和结构之间没有任何运行时差异;唯一的区别与成员可见性有关,这纯粹是编译时的。

从这个问题中并不清楚你如何将 C++ 类与 C 数组进行比较。 C 有结构体,C++ 有数组,一般来说,在 C 中使用数组和在 C++ 中使用数组将产生相同的结果,并且与“POD”(普通旧数据)类类似(除了上面提到的仅限 C++ 的功能之外)。 )

您可能正在考虑 C++ std::vector 与 C 数组之间的区别。 std::vector 确实涉及间接寻址,尽管在许多情况下优化器能够避免它。但是,除非您在编译时知道数组的大小,否则很难在不产生完全相同的间接寻址的情况下使用 C 数组。如果您在编译时知道数组的大小,则可以使用 C++11 std::array,它将生成与 C 数组相同的代码。

关于c++ - 在繁重的模拟代码中,C++ 类/结构会比 C 数组明显慢吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20008334/

相关文章:

c++ - 在 Linux 中使用 C++ 实现低开销间隔定时器

c++ - OpenSSL 1.0.1f 和 "undefined reference to symbol ' SSL_state@@OPENSSL_1.0.0"

c - SDL 窗口未正确关闭

对 %c 和 ASCII 代码感到困惑

c - 多个匿名页面的提前错误

c++ - 如何用 C++ 数组填充 torch::tensor?

c++ - 如何根据模板中的类型有条件地包含一个语句?

arrays - 在使用字符串数组时使用 scanf_s 的正确方法是什么?

java - 我无法访问 TreeMap 中的 int[]

c++ - boost线程池库中的问题