C (C ++ 아님)의 정적 인라인이란 무엇입니까? 많은 함수가 ' static inline '으로 선언 된 이유에 대해 많이 혼란 스럽습니다. Linux Kernel에서.


최상 답변

함수가 static 으로 정의되면 함수는 동일한 소스 파일 내에서만보고 사용됩니다. 정의 된 소스 파일 외부에서 호출 할 수 없습니다 (함수 포인터를 사용하여 호출하지 않는 한). 이 함수는 현재 소스 파일 외부의보기에서 효과적으로 “숨겨집니다”.

함수가 인라인 으로 정의되면 컴파일러는 함수에 대한 호출을 생성하는 대신 함수 호출이 발생하는 위치에서 함수의 내부에 대한 코드를 생성합니다. 이 기술은 함수 호출 오버 헤드를 제거하여 성능을 향상시킬 수 있지만 결과적으로 생성 된 코드의 메모리 공간을 늘릴 수 있습니다. 그러나 컴파일러는 함수의 코드를 인라인으로 생성 할 의무가 없으므로 함수가 너무 길거나 복잡하거나 어떤 이유로 컴파일러가이를 수행 할 수없는 경우 정상적인 함수 호출이 생성됩니다. 그렇기 때문에 인라인은 컴파일러에 대한 힌트 일뿐입니다.

둘 다

static 및 inline 은 현재 소스 파일 외부에서는 보이지 않는 코드이며 컴파일러가 할 수 있다면 호출 할 때마다 인라인으로 생성됩니다. 이 접근 방식은 일반적으로 공개 API의 일부가 아닌 매우 작고 단순하며 자주 호출되는 내부 도우미 함수에 사용됩니다.

답변

인라인 함수의 경우 그것들은 함수 호출의 오버 헤드없이 호출 함수로 복사됩니다.

커널에서 널리 사용됩니다. 이는 일반적으로 성능 향상, 더 많은 최적화를위한 방법으로 수행됩니다. 반드시 그런 것은 아니지만

주로 작은 시간에 중요한 기능에 사용되며 그렇게함으로써 큰 ​​성능 차이를 볼 수 있습니다.

그러나 인라인 키워드를 사용하지 않더라도 컴파일러는 최적화의 일부로 인라인을 시도 할 수 있습니다.

일반적으로 정적 인라인 함수는 헤더에 있어야합니다. 내부 연결을 사용하여 인라인 함수를 정의합니다. 따라서 이러한 함수는 번역 단위에 로컬이고 인라인이라고 말할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다