相关疑难解决方法(0)

C和C++中寄存器变量的地址

我知道寄存器变量的概念和它的用例,但根据我的尝试,我脑子里几乎没有问题.

  1. 我不能在C中访问寄存器变量的地址,虽然我可以做C++!为什么?访问寄存器变量的寻址有什么问题吗?

  2. 假设我在C++中声明一个字符串变量作为寄存器,那么该变量将存储在哪里?在C++中声明非数字数据类型(如'string')的存储类是什么意义?

更新: 我认为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;
}
Run Code Online (Sandbox Code Playgroud)

我观察到的是,如果我将变量'i'作为寄存器并且不尝试使用'&i'来打印地址,那么C++接受推荐并将'i'存储在寄存器中,这可以从运行时间到for循环,如果'i'在寄存器中,则总是大约4-12 ms.但是,如果我尝试打印变量'i'的地址,那么虽然我没有得到任何错误,但C++拒绝推荐,这可以从执行循环的时间开始,如果我没有注册,总是超过25! !

所以,基本上我不能用C和C++中的存储类作为寄存器来获取变量的地址!为什么?

c c++ gcc g++ cpu-registers

5
推荐指数
2
解决办法
9888
查看次数

标签 统计

c ×1

c++ ×1

cpu-registers ×1

g++ ×1

gcc ×1