[Unity]/[C#]

[C#] MethodImpl (feat.인라인 함수)

극꼼 2022. 9. 19. 21:20
반응형


<MethodImpl>

: 메서드의 구현 방법을 자세히 지정해줍니다.

using System.Runtime.CompilerServices;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
void method() { }

 


<많이 쓰이는 MethodImplOptions 키워드>

  • AggressiveInlining : 가능하면 인라인.
  • NoInlining : 컴파일러가 런터임에 인라인되지 않도록 적용.
  • Synchronized : 동기화. 한번에 한 쓰레드에서만.

그 외의 키워드는 아래 링크를 참고하시길 바랍니다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.runtime.compilerservices.methodimploptions?view=net-6.0


<인라인 함수>

: 함수 코드가 호출자에게 롤링되는 컴파일러 최적화 방법입니다. 인라인 함수를 호출 -> 해당 위치로 컴파일러가 인라인 함수 코드 전체를 복사하여 대체함.

컴파일러의 최적화 방법에 따라서, 컴파일러가 일반 함수를 인라인 함수로 취급하여 실행 파일로 만들 수 있다는 특징이 있습니다.

 

  • 장점 : 컴파일러가 인라인 함수의 코드 전체를 호출한 코드 위치로 복사하여 대체함 = 실행 상 호출 단계가 줄어 복잡한 과정이 생략되어 오버헤드를 줄여 실행 속도가 빠름.
    • 오버헤드 : 프로그램의 실행흐름 도중 동떨어진 위치의 코드를 실행시켜야 할 때, 추가적으로 시간, 메모리, 자원이 사용되는 현상.
  • 단점
    • 함수의 정의부가 길면 인라인 함수를 사용하여 얻을 수 있는 장점이 줄어듬.
    • 여러번 호출하게 되면 컴파일 이후 실행 파일의 크기가 커지게 됨.
반응형

'[Unity] > [C#]' 카테고리의 다른 글

[C#] 비동기 메서드(async, await)  (0) 2022.09.21
[C#] ConditionalAttribute  (0) 2022.09.20
[C#] internal 액세스 한정자  (0) 2022.09.18
[C#] 물음표 연산자 3종류(feat. '?.', '??', '?')  (0) 2022.09.17
[C#] try-catch 예외처리  (2) 2022.09.16