programing

__inline_의 의미는 무엇입니까?

subpage 2023. 9. 6. 22:04
반응형

__inline_의 의미는 무엇입니까?

저는 C를 배우려고 노력하고 있습니다.어떤 코드를 읽어내려가다 우연히 다음과 같은 대사가 나왔습니다.

__inline__ void () ...

을은 ?__inline__에 그 를 넣는 만들까요? 어떻게 그것은 달라집니까?

__inline__비표준 확장자입니다.일반적으로 컴파일러에게 "inline this function"이라고 알려주지만, 비표준 확장자이기 때문에 이것이 어떤 컴파일러에 있는지 알지 못하면 확실하게 말할 수 없습니다.

인라인은 기능 호출을 제거하고 호출할 위치에 직접 내용을 배치하는 것입니다.이것은 종종 함수를 호출하는 오버헤드를 제거합니다.코드 블로트(코드가 너무 커져서 캐시에 맞지 않는 것) 때문에 항상 최적인 것은 아닙니다. 따라서 대부분의 컴파일러는 모든 인라인 지시어를 무시하고 자신이 최선이라고 생각하는 작업을 수행합니다.이것은 좋은 일입니다.우리 인간은 그런 일에 매우 서투릅니다. 그리고 보통 컴파일러에게 작업 방법을 알려주는 것은 나쁜 관행으로 여겨집니다.

인라인은 특히 도우미 기능이 있는 경우 중요한 최적화입니다.2 int 중 작은 값을 반환하는 함수를 상상해 보십시오.

int min(int x, int y)
{
    return (x < y) ? x : y;
}

만약 내가 이 함수를 내 코드에 사용한다면, 여기서 실제로 함수 호출을 하는 것은 엄청난 시간 낭비일 것입니다.다음이 있는 경우:

int a = /* some calculation */;
int b = /* some other calculation */;

int minCalc = min(a, b);

그리고 컴파일러는 이 함수를 암시했습니다. 코드는 다음과 같습니다.

int a = /* some calculation */;
int b = /* some other calculation */;

int minCalc = (a < b) ? a : b;

함수를 호출할 때의 오버헤드를 제거합니다.여기서 컴파일러가 함수 호출 뒤에 숨겨져 있던 코드를 직접 사용함으로써 훨씬 더 많은 최적화 작업을 수행할 수 있습니다.보시다시피, 제가 큰 함수를 가지고 있는데 컴파일러가 모든 곳에 줄을 세우도록 강요한다면, 코드 크기는 매우 빠르게 커질 수 있고 실제로 실행 속도를 방해할 수 있습니다.

인 .inline함수를 컴파일러에 나타내기 위해 사용되었던 키워드는 인라인되어야 하지만, 요즘 대부분의 컴파일러들은 함수를 인라인시키는 힌트로 인식하지도 못합니다.

의 이 한 이 의 중요한 부작용이 있습니다.inline, 하지만, 그리고 이것은 유용할 수 있습니다.이된우우ssfdan가이과 inline, 여러 번역 단위에 걸쳐 동일한 함수의 여러 정의는 오류가 아닙니다.대신, 단일 함수 정의가 선택되고 다른 함수 정의는 무시되며 동일한 것으로 가정됩니다(이것이 실제로 괜찮은지 확인하는 것은 사용자에게 달려 있습니다!).이를 통해 ODR 위반 오류의 위험 없이 헤더 파일 내에서 함수를 정의할 수 있습니다.

인라인은 컴파일러에게 함수를 인라인화할 것을 제안하는 것입니다 - 함수와 함수에 대한 코드 블록을 생성하는 대신.call명령어를 사용할 때마다 해당 함수가 호출되는 곳마다 생성된 코드를 효과적으로 잘라 붙여넣습니다.

이는 일반적으로 제안 사항에 불과합니다. 엄격한 루프로 호출되면 성능을 향상시킬 수 있지만 일반적으로 메모리 사용량이 증가하여 일반적으로 성능에 부정적인 영향을 미칠 수 있습니다.컴파일러는 함수를 인라인화할지 말지 스스로 결정할 것입니다. "프로그래머가 이것을 인라인화할 것을 제안한다"는 것을 고려할 수 있지만 (대부분의 컴파일러에서) 단순히 함수를 인라인으로 선언한다고 해서 보장되지는 않습니다.

위키백과 / 인라인 기능

컴퓨터 과학에서 인라인 함수(inline function)는 컴파일러에게 특정 함수에 대해 인라인 확장을 수행하도록 지시하는 데 사용되는 프로그래밍 언어 구조체입니다.즉, 컴파일러는 그 함수가 사용되는 코드의 모든 곳에 그 함수의 완전한 본문을 삽입할 것입니다.

GCC 매뉴얼 § 5.36

ISO C89 프로그램에 포함될 헤더 파일을 작성하는 경우, 다음과__inline__대신에inline. 대체 키워드를 참조하십시오.

__inline__선언은 컴파일러에게 함수가 호출되는 곳마다 대신 함수를 "선택"하도록 알려줍니다.인라인은 매크로를 사용하는 것과 유사합니다. 함수를 호출한 위치에 코드를 제대로 쓴 것처럼 코드가 확장됩니다.

자세한 내용은 GNU 문서를 참조하십시오.

기본적으로, 이것은 컴파일러에 대한 힌트입니다; 이것은 이 함수가 사용되는 곳에 직접 코드를 삽입하는 것이 가능할 수도 있다는 것을 암시합니다.

이렇게 하는 것이 함수 호출의 오버헤드를 피하기 때문에 더 효율적일 수 있다는 생각입니다. 그러나 궁극적으로 컴파일러는 코드 크기, 지정된 최적화 옵션 및 약간의 부두(voodoo)의 조합을 사용하여 이 힌트를 실제로 존중할지 여부를 결정합니다.

부두 비트가 가장 혼란스러운 부분입니다. :) 꼭 의지하지는 마세요.__inline__(또는 더 표준적인 인라인 방식으로) 작동합니다. 알고리즘을 최적화하거나 속도에 관심이 있는 경우 대신 코드를 재구성합니다.

언급URL : https://stackoverflow.com/questions/2082551/what-does-inline-mean

반응형