Sdílet prostřednictvím


Vnitřní funkce kompilátoru

Většina funkcí je obsažena v knihovnách, ale některé funkce jsou integrované (tj. vnitřní) kompilátoru. Označují se jako vnitřní funkce nebo vnitřní objekty.

Poznámky

Pokud je funkce vnitřní, kód této funkce se obvykle vloží do textu, vyhne se režii volání funkce a umožní vygenerování vysoce efektivních strojových instrukcí pro tuto funkci. Vnitřní objekt je často rychlejší než ekvivalentní vložené sestavení, protože optimalizátor má předdefinované znalosti o tom, kolik vnitřních objektů se chová, takže některé optimalizace mohou být k dispozici, které nejsou k dispozici při použití vloženého sestavení. Optimalizátor může také rozšířit vnitřní rozdíly, zarovnat vyrovnávací paměti odlišně nebo provést jiné úpravy v závislosti na kontextu a argumentech volání.

Použití vnitřních objektů ovlivňuje přenositelnost kódu, protože vnitřní prvky, které jsou k dispozici v jazyce Visual C++, nemusí být k dispozici, pokud je kód zkompilován s jinými kompilátory a některé vnitřní prvky, které mohou být k dispozici pro některé cílové architektury, nejsou k dispozici pro všechny architektury. Vnitřní objekty jsou však obvykle přenosnější než vložené sestavení. Vnitřní objekty jsou vyžadovány v 64bitových architekturách, kde vložené sestavení není podporováno.

Některé vnitřní objekty, například __assume a __ReadWriteBarrier, poskytují informace kompilátoru, které ovlivňují chování optimalizátoru.

Některé vnitřní objekty jsou k dispozici pouze jako vnitřní objekty a některé jsou k dispozici ve funkcích i vnitřních implementacích. Kompilátoru můžete dát pokyn, aby používal vnitřní implementaci jedním ze dvou způsobů v závislosti na tom, jestli chcete povolit pouze konkrétní funkce, nebo chcete povolit všechny vnitřní objekty. Prvním způsobem je použití #pragma intrinsic(vnitřní funkce-name-list). Direktivu pragma lze použít k určení jednoho vnitřního nebo více vnitřních objektů oddělených čárkami. Druhou možností je použít možnost kompilátoru /Oi (Generovat vnitřní funkce), která zpřístupňuje všechny vnitřní objekty na dané platformě. V části /Oi použijte #pragma function(vnitřní-function-name-list) k vynucení volání funkce, které se použije místo vnitřní. Pokud je dokumentace pro konkrétní vnitřní poznámky, že rutina je k dispozici pouze jako vnitřní, použije se vnitřní implementace bez ohledu na to, zda /Oi nebo #pragma intrinsic je zadána. Ve všech případech /Oi nebo #pragma intrinsic povoluje, ale nevynucuje, optimalizátor použije vnitřní objekt. Optimalizátor může funkci přesto volat.

Některé standardní funkce knihovny C/C++ jsou k dispozici ve vnitřních implementacích v některých architekturách. Při volání funkce CRT se vnitřní implementace použije, pokud je na příkazovém řádku zadán /Oi .

K dispozici je soubor <hlavičky intrin.h>, který deklaruje prototypy pro běžné vnitřní funkce. Vnitřní objekty specifické pro výrobce jsou k dispozici v <souborech hlaviček immintrin.h> a ammintrin.h<>. Některé hlavičky Windows navíc deklarují funkce, které se mapují na vnitřní objekt kompilátoru.

Následující části obsahují seznam všech vnitřních objektů, které jsou k dispozici v různých architekturách. Další informace o tom, jak vnitřní objekty fungují na konkrétním cílovém procesoru, najdete v referenční dokumentaci výrobce.

Viz také

Referenční informace k assembleru ARM
Referenční dokumentace nástroje Microsoft Macro Assembler
Klíčová slova
Referenční dokumentace knihovny runtime jazyka C