Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么MinGW的std::to_string()运行速度比VS2012慢16倍_C++_Visual Studio 2012_C++11_Mingw_Benchmarking - Fatal编程技术网

C++ 为什么MinGW的std::to_string()运行速度比VS2012慢16倍

C++ 为什么MinGW的std::to_string()运行速度比VS2012慢16倍,c++,visual-studio-2012,c++11,mingw,benchmarking,C++,Visual Studio 2012,C++11,Mingw,Benchmarking,当我对这个函数进行基准测试时,我感到惊讶: int f(int N = 999) { int nMax = 0; for (int i = 1; i <= N; ++i) for (int j = i; j <= N; ++j) { string digits = to_string(i*j); string rDigits = digits; reverse(rDigits.begin(), rDigits.end())

当我对这个函数进行基准测试时,我感到惊讶:

int f(int N = 999) {  
  int nMax = 0;

  for (int i = 1; i <= N; ++i)
    for (int j = i; j <= N; ++j) {
      string digits  = to_string(i*j);
      string rDigits = digits;

      reverse(rDigits.begin(), rDigits.end());

      if (digits == rDigits)
        nMax = max(i*j, nMax);
    }

  return nMax;
}

当我在Ubuntu上用g++4.7.3编译它时,性能与VS2012差不多。

Visual Studio可能已经扭转了
,如果
-条件:

if (digits != rDigits)
    continue;
else
    nMax = max(i*j, nMax);
但这只是一个猜测

顺便说一下,我宁愿写:

string rDigits(digits.rbegin(), digits.rend());

你也可以看看:它可能会给你一些优化算法的想法。

< P>检查你的MIWW构建所使用的C++运行时版本(使用依赖性Walkor或类似的东西)。VS2012支持r值,在您的情况下,可能更重要的是支持小字符串优化。使用它将消除来自to_字符串的任何内存分配。内存分配比查找max或reverse需要更多的CPU。

您正在运行基准测试,为什么不告诉我们哪一部分比较慢?使用MinGW的程序员太多了。他们似乎从来都不想签入补丁,并一直要求用户为他们做这件事。你不能两全其美。这个话题让我很感兴趣。。。例如,如果您尝试使用MinGW 4.7.2,会发生什么情况?您是否尝试在构建字符串时反转字符串,而不是作为缩小区域的第二步<代码>字符串rdigit(digits.rbegin(),digits.rend())
您的基准测试是否还包括任何类型的I/O(如
cout
)?@Antonio MinGW 4.7.2未能编译此代码:未定义的
到字符串()
。您甚至不需要
反向复制
,只需使用反向迭代器
字符串rdigit(digits.rbegin(),digits.rend())构造字符串即可谢谢您的优化建议,但我的问题是,从VS迁移到MinGW时,特定代码的性能会大幅下降。@blastfurny
string rdigit(digits.rbegin(),digits.rend())
不会提高MinGW二进制文件的速度,但会略微降低VS二进制文件的速度。@PaulJurczak:您是否尝试反转
if
-条件?在
字符串rdigit(digits.rbegin(),digits.rend())之后,Visual Studio二进制文件的速度是否相同?如果是,将速度与
string rDigits=reverse\u copy(digits.begin(),digits.end())进行比较…问题在于MinGW中的
std::to_string()
的实现-请参阅我编辑的问题。
string rDigits(digits.rbegin(), digits.rend());