私はこのコードをプロファイリングしていないと言っています。これは主に自分の好奇心のためです。静的変数最適化のC分岐
私は、静的intを既知のエラー値に宣言または定義する関数を持っています。この関数は、コードが分岐するようにします。しかし、関数が成功すると、ブランチが決して再び取られないことが確実にわかります。これのコンパイル時間の最適化はありますか?特にGNU/gcc/glibc?
だから私は、この持っている:関数は(この関数はnullを返した場合、私はプログラムを終了)正常に完了したら、私は将来のすべての呼び出しのためのFD意志が有効であることを知っていると取ることはありませんので、
static unsigned long volatile *getReg(unsigned long addr){
static int fd = -1;
if (fd < 0){
if (fd = open("file", O_RDWR | O_SYNC) < 0){
return NULL;
}
}
}
を最初の枝。私は__builtin_expect()マクロがあります知っているので、私は
if (__builtin_expect((fd<0),0){
しかし、私はそれがコンパイラへのヒントだけだし、それはまだ条件チェックを実行する必要があります理解して何から書くことができます。また、99.9999%のケースで十分なパフォーマンスが得られ、それ以上のパフォーマンスの向上はごくわずかであることがわかります。
最初の状態チェック(fd < 0)が初めて実行された後でさえも防ぐ方法があるのだろうかと思っていました。
自己修正コードが不足しているため、条件に応じて異なる動作が予想される状況で条件付き(または同等の機能ポインタ)を回避する方法はないと私は考えています。 –