VC++에서 #pragma 사용법 설명..
MSDN에 최적화 관련 #pragma 용법은 아래와 같다.
http://msdn.microsoft.com/ko-kr/library/h7k3a0bw.aspx
#pragma auto_inline
#pragma check_stack
#pragma function
#pragma inline_depth
#pragma inline_recursion
#pragma intrinsic
#pragma optimize
이중에서 일단,
#pragma function
#pragma intrinsic
#pragma optimize
에 대해서 정리하고 다음것은 나중에 정리하자.
1. #pragma function
<사용법> |
#pragma function( function1 [, function2, ...] ) |
intrinsic pragma는 컴파일러에 intrinsic function(function call이 아니라, inline code처럼 code자체를 함수 사용하는 장소에 삽입)을 생성하도록 지시한다.
function pragma는 컴파일러에게 강제적으로 function call형태로 구현되도록 지시한다.
function pragma 선언후 intrinsic function으로 기술된 첫 함수부터 영향을 미쳐, 소스코드의 마지막라인까지 영향을 미치거나, 동일한 함수명을 intrinsic pragma로 지시한 라인을 만날때 까지 영향을 미친다.
<사용예시>
#include <string.h>
// use intrinsic forms of memset and strlen
#pragma intrinsic(memset, strlen)
// Find first word break in string, and set remaining
// chars in string to specified char value.
char *set_str_after_word(char *string, char ch) {
int i;
int len = strlen(string); /* NOTE: uses intrinsic for strlen */
for(i = 0; i < len; i++) {
if (isspace(*(string + i)))
break;
}
for(; i < len; i++)
*(string + i) = ch;
return string;
}
// do not use strlen intrinsic
#pragma function(strlen)
// Set all chars in string to specified char value.
char *set_str(char *string, char ch) {
// Uses intrinsic for memset, but calls strlen library function
return (char *) memset(string, ch, strlen(string));
}
int main() {
char *str = (char *) malloc(20 * sizeof(char));
strcpy_s(str, sizeof("Now is the time"), "Now is the time");
printf("str is '%s'\n", set_str_after_word(str, '*'));
printf("str is '%s'\n", set_str(str, '!'));
}
2. #pragma intrinsic
<사용법>
#pragma intrinsic( function1 [, function2, ...] )
intrinsic pragma를 사용하면, 컴파일러가 판단하기에 inline code로 처리하는 것이 좋은면 inline화 시키고 그렇치 않으면 function call 형태를 취하도록 한다.
intrinsic pragma는 function pragma와 페어로 사용될 수 있으며, intrinsic pragma로 지시된 함수는 그다음라인부터 영향을 받아서 function pragma로 재 지정되기 전에는 소스파일전체에 영향을 미친다.
<사용예시>
// pragma_directive_intrinsic.cpp
// processor: x86
#include <dos.h> // definitions for _disable, _enable
#pragma intrinsic(_disable)
#pragma intrinsic(_enable)
void f1(void) {
_disable();
// do some work here that should not be interrupted
_enable();
}
int main() {
}
3. #pragma optimize
<사용법> #pragma optimize( "[optimization-list]", {on | off} ) optimize pragma는 함수 밖에 선언이 되며 pragma가 선언된 후 정의된 첫번째 함수에 영햐응ㄹ 미친다. on/off 파라미터로 optimization-list에 정의된 옵션들을 설정/미설정할수 있다. [[optimization-list]] g : Enable global optimizations. p : Improve floating-point consistency. s or t : Specify short or fast sequences of machine code. y : Generate frame pointers on the program stack. optimize pragma에서 empty string("")는 특별한 기능을 담고 있다. -.off 파라미터 사용시, optimization-list의 모든 옵션을 off시킴 -.on 파라미터 사용시, '/O' compiler option으로 설정된 옵션을 재설정시킴 <사용예시> #pragma optimize( "tp", on ) #pragma optimize( "", off ) . . . #pragma optimize( "", on ) 출처 : http://blog.naver.com/kri7001/30037616891 |