반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

폴크(FOLC)

inline function / static function 본문

카테고리 없음

inline function / static function

folcjin 2025. 5. 27. 23:08
728x90
반응형

inline 키워드는 함수를 호출하는 대신 컴파일 시점에 해당 함수의 본문을 코드에 직접 삽입하도록 컴파일러에 요청하는 것입니다.

inline int add(int a, int b)
{
    return a + b;
}

 

목적

  • 함수 호출 오버헤드 제거 → 성능 향상
  • 헤더 파일에 함수 정의를 포함할 수 있게 함 → 링크 오류 방지

특징

  • 함수 정의는 헤더 파일에 위치해야 함
  • inline은 컴파일러에 대한 요청이지 강제는 아님
  • 여러 번 정의되어도 ODR(One Definition Rule)을 위반하지 않음

 

핵심

  • inline은 성능 최적화를 위한 힌트로, 스레드 안전성과는 직접적 연관이 없습니다.
  • 멀티스레드 환경에서 inline 함수를 사용해도, 내부에 스레드 비안전한 코드(예: 전역 변수 접근)가 있다면 여전히 문제가 발생합니다.
  • 해결법: std::mutex 또는 std::atomic 사용

 

 

 

 

 

static 함수는 선언된 소스 파일(.cpp) 내부에서만 사용 가능한 함수를 의미합니다. 다른 파일에서 참조할 수 없습니다.

cpp
복사편집
static int multiply(int a, int b)
{
    return a * b;
}

 

목적

  • 함수나 전역 변수의 링크 범위를 현재 소스 파일로 제한
  • 심볼 이름 충돌 방지 (특히 라이브러리 작성 시 유용)

특징

  • **파일 범위(local linkage)**를 가짐
  • 헤더 파일이 아닌 소스 파일에 정의해야 함
  • 컴파일러가 인라인 최적화를 더 자유롭게 할 수 있음 (외부에 노출되지 않으므로)

핵심

  • static 함수는 링크 범위(translation unit scope) 를 제한하는 역할일 뿐, 스레드 동기화와는 무관합니다.
  • 하지만 내부에 static 지역 변수가 포함되어 있다면, 멀티스레드와 관련된 중요한 이슈가 발생할 수 있습니다.

 

 

 

C++11 이후

  • 정적 지역 변수의 초기화는 thread-safe 합니다. (C++11 표준 보장)
  • 그러나 값에 대한 읽기/쓰기 연산은 여전히 스레드 안전하지 않습니다 → 데이터 레이스 발생 가능
inline / static vs 멀티스레딩
inline 컴파일러에 인라인 최적화 요청 직접 영향 없음 내부 코드가 스레드 안전해야 함
static 함수 현재 소스 파일 내에서만 접근 가능 직접 영향 없음 파일 단위 격리는 가능
static 변수 정적 저장 기간, 단 한 번 초기화 초기화는 thread-safe (C++11 이상)
연산은 안전하지 않음
atomic 또는 mutex 필요


728x90
반응형
사업자 정보 표시
사업자 등록번호 : -- | TEL : --