レジスタ変数の概念とその使用例は知っていますが、私が試したことに基づいて、いくつかの疑問が頭に浮かびます。
Cではレジスタ変数のアドレスにアクセスできますが、C++ではアクセスできません! なんで?レジスタ変数のアドレッシングへのアクセスに問題はありますか?
C++ で文字列変数をレジスタとして宣言した場合、その変数はどこに格納されるでしょうか? C++ で「文字列」などの非数値データ型のストレージ クラスをレジスタとして宣言するポイントは何ですか??
更新: 次のようなプログラムでエラーが発生しなかったため、C++ を使用するとレジスタ変数のアドレスをフェッチできると思いました。
#include<iostream>
#include<time.h>
using namespace std;
clock_t beg, en;
int main(){
int j, k=0;
beg=clock();
for(register int i=0;i<10000000;i++){
/*if(k==0){
cout<<&i<<endl; // if this code is uncommented, then C++ rejects the recommendation to make 'i' as register
k++;
}*/
}
en=clock();
cout<<en-beg<<endl;
cout<<&j<<endl<<&k;
return 0;
}
私が観察したことは、変数「i」をレジスタとして作成し、「&i」を使用してアドレスを出力しようとしない場合、C++ は推奨事項を受け入れ、「i」をレジスタに格納します。これは実行時間から推測できます「i」がレジスタにある場合、ループは常に約 4 ~ 12 ミリ秒になります。しかし、変数 'i' のアドレスを出力しようとすると、エラーは発生しませんが、C++ は推奨事項を拒否します。これは、i が登録されていない場合は常に 25 を超えるループの実行時間から推測できます。 !
したがって、基本的に、C と C++ の両方で、記憶域クラスを持つ変数のアドレスをレジスタとしてフェッチすることはできません!! なぜ?