Я очень новичок в программировании на c и c++, поэтому я начну с основ. Я написал идентичные программы цикла Фибоначчи для c и c++ для проверки относительной скорости. Я думал, что они будут примерно одинаковыми для чего-то такого простого, но версия c++ медленнее в 60 раз. Все, что они делают, это перебирают и выводят первые 14 чисел Фибоначчи 10000 раз. Вот версия c:
#include <stdio.h>
int main (){
int c = 0;
int x, y, z;
while(c < 10000)
{
x = 0;
y = 1;
while(x < 255)
{
printf("%d\n", x);
z = x + y;
x = y;
y = z;
}
c++;
}
return 0;
}
а вот версия c++:
#include <iostream>
using namespace std;
int main()
{
int c = 0, x = 0, y = 0, z = 0;
while(c < 10000)
{
x = 0;
y = 1;
while(x < 255)
{
cout << x << endl;
z = x + y;
x = y;
y = z;
}
c++;
}
return 0;
}
Я написал оба в notepad++ и скомпилировал их, используя g++ из mingw, который поставляется с кодовыми блоками:
g++ -o fibc.exe fib.c -s
g++ -o fibcpp.exe fib.cpp -s
Размер исполняемых файлов очень разный: размер c равен 8,5 КБ, а размер c++ равен 784 КБ! Я использовал PowerShell для определения времени их:
Measure-Command {start-process "C:\Path\fibcpp.exe" -RedirectStandardOutput "C:\Path\cpp.txt" -Wait}
Полученные файлы идентичны, но версия c заняла 1 секунду, а версия c++ - 60 секунд! (На самом деле, создание цикла в 1 миллион для программы c заняло всего 13 секунд). Я также написал c++ в Visual Studio 17 и скомпилировал его с конфигурацией выпуска x86. Размер программы теперь составляет 9,5 КБ, но время выполнения совпадает с версией g++: 62 секунды. Почему это происходит для такой простой программы?