【发布时间】: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