strictモードで実行している場合、 GCCは多くのビルトインを無効に-std=c...
します。
厳密なISOCモード(-ansi、-std = c90、-std=c99または-std=c11)以外では、関数_exit、alloca、bcmp、bzero ... stpcpy、...は組み込み関数として処理できます。 。これらの関数にはすべて、対応するバージョンの前に_が組み込まれています。これは、厳密なC90モードでも使用できます。
その理由はありますか?ビルトインは準拠していませんか?それとも、標準では、呼び出すときmemcpy
に実際に呼び出す必要があり、最適化できないと規定されているためですか?
を使用して再コンパイルすると-std=gnu*
、さらに最適化が可能になるため、コードを確実に高速に実行できるようになります。
GCCは通常、特定の組み込み関数をより効率的に処理するための特別なコードを生成します。たとえば、allocaの呼び出しは、スタックを直接調整する単一の命令になる場合があり、memcpyの呼び出しは、インラインコピーループになる場合があります。