【问题标题】:C Code slower on Windows than on LinuxC 代码在 Windows 上比在 Linux 上慢
【发布时间】:2013-06-01 23:30:54
【问题描述】:

我正在开发一个为 Windows 和 Linux(32 位和 64 位)构建的项目。 该项目基于为文本文件加载字符串,对其进行处理并将结果写入 SQLite3 数据库。

在 linux 上,它达到了每秒近 400k 的序列,由 GCC 编译,没有任何优化。但是在 Windows 上它停留在每秒 100k 序列,在 VS2010 上编译而没有任何优化。

我尝试在编译器中使用优化,但没有任何改变。

这是对的吗? Windows 上的 C 代码运行速度较慢?

编辑:

我认为我需要在某些方面更加清楚。 我在启用和禁用代码优化的情况下进行了测试。性能没有改变,可能是因为我的程序的瓶颈是浪费时间从 HD 读取数据。

该程序利用并行计算的优势。有一个队列,一个线程将处理过的数据排队,另一个出队写入 SQLite 数据库。这样我认为不会有任何性能损失。

【问题讨论】:

  • Linux 上的 GCC 据说是一个很好的编译器(当你要求它优化时,例如gcc -O2); Linux 是一个相当不错的内核。
  • 我们真的需要看看你用的是什么电话。但通常它不应该有那么大的差异。机器代码在每个操作系统上以相同的速度运行。但是在某些情况下,编译器会输出以不同速度运行的不同机器代码。
  • 这在很大程度上取决于代码在做什么,更重要的是,它是如何做的。例如,如果你正在做一堆 posix API 的东西,那么与 Win api 接口可能会有额外的开销。
  • Windows 应该不会慢这么多,并且 nothing 随着优化而改变听起来不太正确。如果没有优化,它非常依赖于编译器,他们认为是优化并因此禁用,但启用优化后,两个编译器都应该做得相当好。
  • 好吧,如果您的代码在优化和未优化的情况下运行相同的速度,那么您要么测量错误,要么代码的速度完全不相关,因为所有时间都花在磁盘 i/o 或类似的东西上

标签: c linux windows performance portability


【解决方案1】:

这是对的吗? Windows 上的 C 代码运行速度较慢?

没有。 C没有速度。引入速度的是 C 的实现。有一些实现会产生快速行为(通常是“产生快速机器代码的编译器”)和产生对 Windows 和 Linux 的缓慢行为的实现。

在这里重要的不仅仅是 Windows 和 Linux。一些编译器针对特定处理器进行了优化,并且会为任何其他处理器生成慢速机器代码。

我尝试在编译器中使用优化,但没有任何改变。

未启用优化的测试速度毫无意义。但是,这确实往往表明 其他东西 很慢。也许在 Windows 中为 SQLite3 客户端生成库文件的实现是产生慢代码的实现。我将首先重建该批次(包括 SQLite3 库)启用全面优化。之后,您可以尝试使用分析器来确定差异所在,并使用结果对您的代码执行智能优化。

【讨论】:

  • 甚至可能是平台上不同的sqlite执行的I/O,与sqlite代码或程序没有直接关系。
  • @nos 确实如此。希望通过在 Linux 和 Windows 上进行分析以确定 速度 的差异所在来突出显示这一点。如果 SQLite3 在 Linux 上的速度比在 Windows 上更快,那么除了在启用全面优化和再次测试的情况下重新构建批次,或者用不同的 SQL 引擎替换它之外,没有什么可以做的。
猜你喜欢
  • 1970-01-01
  • 2012-03-21
  • 2021-09-20
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多