Что является более эффективным: функция Win32. или подобная функция CRT. в приложении VC ++. - PullRequest
1 голос
/ 16 декабря 2010

Я начал программировать на win32 для удовольствия, потому что мне нравятся сложные вещи, и мне нравится программирование (во всем виноват Чарльз Петцольд и Джеффри Рихтер в написании таких прекрасных книг.) И может быть потому, что у меня есть кое-что для кода производительности.

Теперь реальный вопрос: я буду использовать пример GetEnvironmentVariable () [функция win32 API.] И getenv () [стандартная функция CRT.].

Оба они возвращают значениепеременной окружения, предоставленной в качестве аргумента.

То есть, какой из них будет более эффективным, или, другими словами, какой из них имеет более короткий стек вызовов, а какой - более прямой? Подумайте о некоторой функции.меня вызывают миллион раз.

Я полагаю, что один из них сопоставляется с другим. Я прав, или я что-то здесь упускаю.

Резюме: при программировании для win32 api, если естьдоступны ли функции в библиотеках api и c / c ++, которые предлагают одинаковую функциональность, какую мне следует использовать?

спасибо.

Ответы [ 3 ]

6 голосов
/ 16 декабря 2010

Для большинства приложений маловероятно, что использование того или иного API будет основной проблемой производительности.

Стандартная библиотека CRT и C ++ сопоставлена ​​с Win32 API, поэтому использование Win32 direct будет несколько более эффективным.Если вам нужно написать переносимый код на C, используйте CRT.

В C ++ чаще всего использование стандартной библиотеки позволяет упростить создание идиоматически правильного кода и перевешивает любой предельный выигрыш в производительности при переходе непосредственно к Win32.отличный пример, потому что сопоставление с Win32 тривиально.Вместо этого рассмотрите возможность воспроизведения <iostream> с использованием Win32 API, и преимущество хорошей библиотеки становится более ясным.

3 голосов
/ 16 декабря 2010

Палка с ЭЛТ.Он сопоставляется с WinAPI, но не обязательно напрямую.Например, printf () может отображаться в WriteConsole, но с буферизацией для производительности.Если GetEnvironmentVariable () не нуждается в каком-либо коде, обернутом вокруг него, тогда getenv () будет иметь ту же производительность, и если это произойдет (например, буферизация), то CRT предоставит ее.И это «правильно», а не «написать».

0 голосов
/ 17 декабря 2010

Обе функции, вероятно, будут схожими по производительности, возможно, заканчивая чтение значений из реестра.Но, что более важно, нет причин, по которым они когда-либо станут критическими проблемами производительности: реестр - это база данных, если вам нужно снова и снова использовать какое-то значение из реестра, вы кешируете его в какую-то переменную.

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