Cでは、ポインタを使用すると、関連付けられた変数の「レジスタ」プロパティがキャンセルされますか?
#include<stdio.h>
#include<stdlib.h>
int main()
{
register int clk=0; //maybe register maybe not
int *adr=&clk; //not a register now? i have its address
*adr=1; //if i use this 1000000 times, does it exist in L1 at least?
printf("%d",clk);
return 0;
}
「レジスタ変数のアドレスを取得できません」というコンパイラ エラーが発生しますが、レジスタ %100 ではありません。それはただのチャンスです。
これは最も遅いループですか?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p;
int i=0;
p=&i;
for(*p=0;(*p)<100;(*p)++)
{
//do nothing
}
printf("%d ",i);
return 0;
}
ほぼすべての変数をポインター スタイルにし、3 つの変数のみを "register" キーワードでプリミティブ型にすると、コンパイラはこれら 3 つの変数をより高い確率で "実際に登録" しますか?
わかった。問題が解決しました。私はいくつかのアセンブリを学び、これが最適化レベルと変数のボラティリティにも依存することを発見しました。__asm{} を使用すると、確実にレジスターで計算されます。ありがとう。