2010-12-16 6 views
1

필자는 복잡한 것들을 좋아하기 때문에 win32 프로그래밍을 재미있게 시작 했으므로 프로그래밍을 좋아합니다 (이것은 Charles Petzold와 Jeffrey Richter가 그러한 아름다운 책을 저술 한 것에 대한 결함입니다). 성능 코드에 대한 문제가있을 수 있습니다.더 효율적입니다 : Win32 함수. 또는 유사한 CRT 기능. VC++ 앱에서.?

진짜 질문 : GetEnvironmentVariable() [win32 API func.] 및 getenv() [표준 CRT func.] 예제를 사용합니다.

둘 다 인수로 제공된 환경 변수의 값을 반환합니다.

그래서 어느 쪽이 더 효율적인지 또는 어느 쪽이 더 짧은 호출 스택을 사용 하는지를 사용하면 어떤 것이 더 효과적인지 생각해보십시오. 백만 번이라고합니다.

나는 그 중 하나가 다른쪽에 매핑된다고 생각합니다. 맞습니다. 아니면 여기에 뭔가 빠져 있습니다.

요약 : 동일한 기능을 제공하는 api 및 c/C++ 라이브러리에서 사용할 수있는 기능이 있다면 win32 API를 프로그래밍하는 동안 어느 것을 사용해야합니까?

감사합니다.

답변

3

CRT가 붙어 있습니다. WinAPI에 매핑되지만 반드시 직접 매핑 할 필요는 없습니다. 예를 들어 printf()는 WriteConsole에 매핑 할 수 있지만 성능을 위해 버퍼링을 사용합니다. GetEnvironmentVariable()이 코드를 둘러 쌀 필요가없는 경우 getenv()는 동일한 성능을 가지며 버퍼링과 같은 경우 CRT가 제공합니다. 그리고 "옳다", "쓰지 않는다".

+0

내 영어에 대해 유감스럽게 생각합니다. – rsjethani

6

대부분의 앱에서 성능 관련 문제가 하나 또는 다른 API를 사용하는 것은 거의 없습니다.

CRT 및 C++ 표준 라이브러리는 Win32 API에 매핑되므로 Win32 direct를 사용하면 약간 더 효율적입니다. 휴대용 C 코드를 작성해야하는 경우 CRT를 사용하십시오.

C++에서 가장 자주 표준 라이브러리를 사용하면 관용적으로 올바른 코드를 쉽게 만들 수 있으며 Win32로 직접 이동하는 것보다 중요한 성능 향상을 능가합니다.

getenv은 Win32에 대한 매핑이 간단하기 때문에 좋은 예가 아닙니다. 대신 Win32 API를 사용하여 <iostream>을 재현하는 것을 고려해보십시오. 그러면 좋은 라이브러리의 이점이 분명해질 것입니다.

+0

죄송합니다. "iostream"이라고 말한 것을 이해하지 못 했으므로, 영어가 좋지 않아서 ... 제발 참아주십시오. – rsjethani

+0

당신의 질문이 C++에 대해서도 다루었 기 때문에, Win32를 사용하여 스스로 재현하는 것이 쉽지 않은 예제로 인용하고 있습니다. 해당 기능의 자세한 내용은 여기를 참조하십시오. - http://msdn.microsoft.com/en-us/library/zh80x809(v=VS.100).aspx. CRT 예제의 경우,'printf'를 어떻게 재구성 할 것인지 생각해보십시오. –

+0

에 대한 마지막 편집 .. 네 말이 맞아요.하지만 기본 개발을 수행 할 때 표준 라이브러리가 전체 API를 다루지 않기 때문에 API가 여러 번 재생 될 것입니다. – rsjethani

0

두 기능 모두 성능면에서 유사하기 때문에 레지스트리에서 값을 읽는 것을 끝낼 수 있습니다. 그러나 더 중요한 것은 레지스트리가 데이터베이스라는 중요한 성능 문제가 될 이유가 없다는 것입니다. 레지스트리에서 몇 가지 값을 반복해서 사용해야하는 경우이를 일부 변수에 캐시합니다.

+0

'getenv'와 레지스트리는 연결되어 있지 않습니다. 환경 변수에 대한 정보는 다음을 참조하십시오. http://msdn.microsoft.com/en-us/library/ms682653(v=VS.85).aspx –

관련 문제