Функции Win32 API по сравнению с их аналогами CRT (например, CopyMemory и memcpy) - PullRequest
9 голосов
/ 21 января 2012

При написании кода Win32 C / C ++, есть ли какое-либо преимущество (например, производительность?) В использовании специфичных для Windows функций, таких как lstrcpyn или CopyMemory, вместо соответствующих функций CRT (кроме переносимости функций CRT)?

Ответы [ 2 ]

8 голосов
/ 21 января 2012

По крайней мере, некоторые функции CRT используют функции Win32 для внутреннего использования.Кроме того, CRT требует дополнительной инициализации (например, данных, специфичных для потока, для таких функций, как strtok) и очистки, что может не потребоваться.

Вы можете создать простое приложение Win32, без какой-либо зависимости от чего-либоеще включая ЭЛТ (так же, как вы могли бы создать простое приложение NT с использованием NTDLL.DLL - я думаю smss.exe Windows - такой процесс, кстати).

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

ОБНОВЛЕНИЕ Поскольку люди, похоже, настолько запутались в различии отдельных функций, в частности memcpy против CopyMemory,Я хотел бы добавить, что не все функции в CRT являются обертками вокруг тех в Win32.Естественно, некоторые из них могут быть реализованы без помощи Win32 (на самом деле memcpy является хорошим примером для этого), в то время как другие (разумно) не могут.Что-то, на что, я полагаю, @Merdad намекнул в своем ответе.

Итак, не говоря о переносимости, я не думаю, что производительность - это следующий лучший аргумент для или против использования CRT.Вы должны выбрать то, что подходит лучше всего, и это, как правило, будет ЭЛТ.И ничто не говорит против использования отдельных функций Win32 (с CRT-эквивалентами), где вы, кажется, подходите.

1 голос
/ 21 января 2012

Это зависит от функции и ваших требований.

Для таких вещей, как memcpy, нет никакого смысла вообще в выборе версий для Windows.Придерживайтесь стандарта C, чтобы он был простым и портативным.

Для других вещей, таких как mbstowcs, вам может понадобиться использовать такие вещи, как MultiByteToWideChar, в зависимости от того, какие функции вам нужны.* Лично я обращаюсь к версиям C, если это возможно, и только потом к версиям Win32 - потому что действительно нет причин писать специфичный для Windows код, когда он может быть написан переносимым образом.

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