Сравнение производительности между Windows GCC и Visual Studio.

В настоящее время я собираю библиотеку оптимизации с открытым исходным кодом (нативный C++), поставляемую с make-файлами для использования с gcc. Поскольку я пользователь Windows, мне любопытно узнать о двух вариантах компиляции, используя gcc с MinGW/Cygwin или вручную создавая проект Visual Studio и компилируя исходный код.

1) Если я скомпилирую с использованием MinGW/Cygwin + gcc, потребуется ли итоговому.lib (статической библиотеке) какие-либо библиотеки из MinGW/Cygwin? Т.е. я могу распространить свой скомпилированный.lib на ПК с Windows, на котором нет MinGW/Cygwin, и будет ли он по-прежнему работать?

2) Помимо различий в производительности между самими компиляторами, есть ли накладные расходы, связанные с компиляцией с использованием MinGW/Cygwin и gcc - как в случае, когда уровень эмуляции компилируется в библиотеку, или gcc создает собственную библиотеку Windows?

3) Если скорость - моя основная задача библиотеки, какой метод лучше всего использовать? Я понимаю, что это довольно открытый подход, и я могу лучше всего проводить свои собственные тесты, но если у кого-то есть опыт здесь, это было бы здорово!

1 ответ

Весь смысл Cygwin - это уровень эмуляции Linux, и по умолчанию (то есть, если вы не выполняете кросс-компиляцию), бинарные файлы должны cygwin1.dll бежать.

Это не относится к MinGW, который создает двоичные файлы как "родные", так и из MSVC. Однако MinGW поставляется с собственным набором библиотек времени выполнения, в частности libstdc++-6.dll, Эта библиотека также может быть связана статически с помощью -static-libstdc++, в этом случае вы также, вероятно, хотите скомпилировать с -static-libgcc,

Это не означает, что вы можете свободно смешивать библиотеки C++ из разных компиляторов (см. Эту страницу на mingw.org). Если вы не хотите ограничивать себя extern "C" Интерфейс вашей библиотеки, вам, скорее всего, придется выбрать один компилятор и придерживаться его.

Что касается ваших проблем с производительностью: использование Cygwin приводит к (незначительному?) Штрафу при фактическом взаимодействии с ОС - когда речь идет о необработанных вычислениях, имеет значение только качество оптимизатора.

Другие вопросы по тегам