gpt4 book ai didi

c++ - 为什么在 VCC 2003 中编译需要这么长时间?

转载 作者:可可西里 更新时间:2023-11-01 09:18:43 24 4
gpt4 key购买 nike

我的团队需要“Sobol 准随机数生成器”——一种以高质量结果和运行速度而闻名的常见 RNG。我找到了 what looks like a simple C implementation on the web .在家里,我几乎可以立即使用我的 Linux GCC 编译器编译它。

第二天,我在工作中试了一下:如果我在 Visual Studio 中以 Debug模式编译,大约需要 1 分钟。如果我在 Release模式下编译它,大约需要 40 分钟。

为什么?

我知道“发布”模式会触发一些编译器优化……但是这么小的文件怎么可能花这么长时间来优化呢?它主要是评论和静态数据。几乎没有什么值得优化的。

这些 PC 都不是特别慢,无论如何我知道编译时间在一系列 Windows 计算机上是一致的。我还听说较新版本的 Visual Studio 具有更快的编译时间,但是目前我们仍然使用 Visual Studio.Net 2003。在 GCC(与 Ubuntu 8.04 捆绑在一起的版本)上编译总是需要几微秒。

最佳答案

老实说,我不太确定这些代码有那么好。里面有难闻的气味。即,这个函数:

unsigned int i4_xor ( unsigned int i, unsigned int j )

//****************************************************************************80
//
// Purpose:
//
// I4_XOR calculates the exclusive OR of two integers.
//
// Modified:
//
// 16 February 2005
//
// Author:
//
// John Burkardt
//
// Parameters:
//
// Input, unsigned int I, J, two values whose exclusive OR is needed.
//
// Output, unsigned int I4_XOR, the exclusive OR of I and J.
//
{
unsigned int i2;
unsigned int j2;
unsigned int k;
unsigned int l;

k = 0;
l = 1;

while ( i != 0 || j != 0 )
{
i2 = i / 2;
j2 = j / 2;

if (
( ( i == 2 * i2 ) && ( j != 2 * j2 ) ) ||
( ( i != 2 * i2 ) && ( j == 2 * j2 ) ) )
{
k = k + l;
}

i = i2;
j = j2;
l = 2 * l;
}

return k;
}

还有一个 i8_xor。还有几个 abs 函数。

我想发帖到 DailyWTF井井有条。

编辑:对于非 C 程序员,这里有一个关于上面的功能的快速指南:

function xor i:unsigned, j:unsigned
answer = 0
bit_position = 1
while i <> 0 or j <> 0
if least significant bit of i <> least significant bit of j
answer = answer + bit_position
end if
bit_position = bit_position * 2
i = i / 2
j = j / 2
end while
return answer
end function

要确定最低有效位是设置还是清除,使用以下内容:

bit set if i <> (i / 2) * 2
bit clear if i == (i / 2) * 2

是什么让代码额外 WTFy 是 C 定义了一个 XOR 运算符,即“^”。所以,而不是:

result = i4_xor (a, b);

你可以拥有:

result = a ^ b; // no function call at all!

原来的程序员真的应该知道异或运算符。但即使他们没有这样做(当然,这是另一个混​​淆的 C 符号),他们对 XOR 函数的实现也差得令人难以置信。

关于c++ - 为什么在 VCC 2003 中编译需要这么长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com