programing

본질이란 무엇인가?

prostudy 2022. 7. 30. 11:16
반응형

본질이란 무엇인가?

그게 뭔지, 왜 필요한 건지 설명해줄 사람?내장 함수를 사용해야 하는 경우 어떤 종류의 애플리케이션을 구축하고 있습니까?

본질 함수는 라이브러리가 제공하는 함수의 구현에 링크하지 않고 가능한 한 컴파일러가 직접 구현하는 함수입니다.

일반적인 예는 다음과 같습니다.strncpy().

, 「」에 함수 합니다.strncpy()반환 주소를 사용하여 '스택 프레임'을 설정하는 경우 실제 바이트 복사보다 더 많은 시간이 소요됩니다.게다가 CPU 프리페치버퍼에 대한 영향은 몇 클럭 사이클 동안 CPU 실행을 정지시킵니다.

대신 함수 호출 대신 내재 함수가 컴파일러에 의해 구현된다.「」의 예에서는,strncpy() 바이트 는 , , , , , , , , , , , , , , , , , , , , ,가 있는 장소에서 직접 strncpy()출됩니니다다

과 비슷합니다.strncpy()예를 들어, 모든 고유 함수는 필요한 제약 조건이 충족될 경우 인라인 코드로 직접 구현됩니다.

함수의 주소가 필요한 경우, 본질 함수의 비내성 복사본은 일반적으로 표준 라이브러리에 여전히 존재합니다.

인라인 함수에 비해 본질 함수는 컴파일러에 의해 제공됩니다.C 프로그램의 소스 코드에는 본질적인 함수가 쓰여져 있는 곳이 없으며, 링크되어야 하는 라이브러리 구현도 없습니다.인라인 함수는 컴파일러가 인라인 함수의 소스 코드를 읽는다는 점에서 다르지만 나중에 함수 호출의 오버헤드를 제외하고 인라인 함수의 컴파일된 변환을 오브젝트 코드로 직접 내보낼 수 있다는 점에서 유사합니다.

인 펑시톤과 입니다.#include★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★함수의 은 """로 해야 "로 해야 합니다.#include선언되지 경우 first.d(일단 선언된 경우)입니다.

일반적으로 "intrinsics"는 내장 함수, 즉 컴파일러가 라이브러리의 실제 함수를 호출하는 대신 인라인으로 생성할 수 있는 대부분의 표준 라이브러리 함수를 말합니다.를 들어, '아까보다'와 같은이 있습니다.memset(array1, 10, 0)는 다음과 같이 x86용으로 컴파일 할 수 있습니다.

 mov ecx, 10
 xor eax, eax
 mov edi, offset FLAT:array1
 rep stosb

이와 같은 본질은 순전히 최적화입니다."필요한" 인텐션은 컴파일러가 직접 생성할 수 없는(또는 보통 생성하지 않는) 코드를 생성할 수 있는 인텐션을 컴파일러가 지원하는 상황일 수 있습니다.예를 들어, x86용 컴파일러의 상당수는 MMX 명령의 직접적인 표현인 "함수"를 사용할 수 있는 "MMX 내장"을 가지고 있습니다.

내장함수는 컴파일러에 의해 라이브러리의 일부가 아닌 함수로 공개됩니다.

가장 많이 사용하는 것은 컴파일러가 나타내는 기계 명령으로 정확하게 취급하는 어셈블리 내장 함수입니다.예를 들어 컴파일러가 자동으로 생성하지 않는 특정 CPU 명령을 이용할 필요가 있는 코드나 완전한 인라인 어셈블리 섹션이 필요하지 않은 코드에서 사용할 수 있습니다.

"Intrinsics"는 컴파일러가 이를 인식하고 프로그램을 선언할 필요 없이 구현하는 언어의 기능입니다.컴파일러는 작업을 수행하기 위해 런타임 라이브러리에 링크하거나 링크하지 않을 수 있습니다.예를 들어 C++에서는 구조 복사 조작이 암묵적으로 이루어집니다.

struct {
    int  a;
    char b [100];
    long c [27];
} s, t;

...
s = t;   // this statement copies hundreds of bytes, likely with a rtl call

다른 예로는 복잡한 유형을 암묵적으로 지원하는 Fortran과 같은 언어, 초월 함수(사인, 접선 등)를 선언할 필요가 없고 선언할 수 없는 언어 등이 있습니다.PHP, Javascript, Ruby 등은 배열 생성 및 검색, 정규 표현 일치 실행 등 수백 가지의 고유 기능을 가지고 있습니다.

다른 질문들에 대해서는, 신고할 필요가 있는지 없는지가 유일한 차이입니다.예를 들어, 초월 함수를 사용하는 C++ 프로그램에는 다음과 같은 연산 라이브러리 선언이 포함되어야 합니다.

#include <math.h>

내재성에 의존하는 애플리케이션의 특별한 패턴은 없습니다.그것은 컴파일러 라이터나 프로그래머에게 중요한 문제입니다.

언급URL : https://stackoverflow.com/questions/2268562/what-are-intrinsics

반응형