Сравнение производительности между скомпилированной Windows GCC и Visual Studio - PullRequest
4 голосов
/ 23 июля 2011

В настоящее время я собираю библиотеку оптимизации с открытым исходным кодом (нативный 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 Ответ

5 голосов
/ 23 июля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...