我知道寄存器变量的概念及其用例,但根据我的尝试,我脑海中几乎没有问题。
尽管我可以在 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”在寄存器中,for 循环将始终在 4-12 毫秒左右。但是,如果我尝试打印变量“i”的地址,那么虽然我没有收到任何错误,但 C++ 拒绝了建议,这可以从执行循环的时间推断出来,如果 i 没有注册,则该时间总是超过 25! !
因此,基本上我无法获取具有存储类的变量的地址作为 C 和 C++ 中的寄存器!为什么?