Le code s’exécute 2 fois plus vite sous Windows que sous Linux

J’ai un morceau de code qui s’exécute 2 fois plus vite sous Windows que sous Linux. Voici les temps que j’ai mesurés:

g++ -Ofast -march=native -m64 29.1123 g++ -Ofast -march=native 29.0497 clang++ -Ofast -march=native 28.9192 visual studio 2013 Debug 32b 13.8802 visual studio 2013 Release 32b 12.5569 

Cela semble vraiment être une énorme différence.

Voici le code:

 #include  #include  #include  static std::size_t Count = 1000; static std::size_t MaxNum = 50000000; bool IsPrime(std::size_t num) { for (std::size_t i = 2; i < num; i++) { if (num % i == 0) return false; } return true; } int main() { auto start = std::chrono::steady_clock::now(); std::map value; for (std::size_t i = 0; i < Count; i++) { value[i] = IsPrime(i); value[MaxNum - i] = IsPrime(MaxNum - i); } std::chrono::duration serialTime = std::chrono::steady_clock::now() - start; std::cout << "Serial time = " << serialTime.count() << std::endl; system("pause"); return 0; } 

Tout cela a été mesuré sur la même machine avec Windows 8 vs Linux 3.19.5 (gcc 4.9.2, clang 3.5.0). Linux et Windows sont tous deux 64 bits.

Quelle pourrait en être la raison? Quelques problèmes de planificateur?

EDIT: Il a été causé par la construction de binarys 32b sur Windows par opposition aux binarys 64b sur Linux, voici les nombres 64b pour les fenêtres:

 Visual studio 2013 Debug 64b 29.1985 Visual studio 2013 Release 64b 29.7469 

    Vous ne dites pas si les systèmes d’exploitation Windows / Linux sont 32 ou 64 bits.

    Sur une machine Linux 64 bits, si vous changez la taille_t en int, vous constaterez que les temps d’exécution diminuent sous Linux à une valeur similaire à celle que vous avez pour Windows.

    size_t est un int32 sur win32, un int64 sur win64.

    EDIT: juste vu votre déassembly de Windows.

    Votre système d’exploitation Windows est la variété 32 bits (ou au moins vous avez compilé pour 32 bits).