在32位,我们有8个"通用"寄存器.使用64位,数量翻倍,但它似乎独立于64位变化本身.
现在,如果寄存器如此之快(没有存储器访问),为什么它们自然不存在呢?CPU构建器不应该在CPU中使用尽可能多的寄存器吗?为什么我们只有我们拥有的金额的逻辑限制是什么?
我有一个关于装配的基本问题.
如果它们也可以在内存上工作,为什么我们只在寄存器上进行算术运算呢?
例如,以下两个原因(基本上)都将相同的值计算为答案:
片段1
.data
var dd 00000400h
.code
Start:
add var,0000000Bh
mov eax,var
;breakpoint: var = 00000B04
End Start
Run Code Online (Sandbox Code Playgroud)
片段2
.code
Start:
mov eax,00000400h
add eax,0000000bh
;breakpoint: eax = 0000040B
End Start
Run Code Online (Sandbox Code Playgroud)
从我所看到的,大多数文本和教程主要在寄存器上进行算术运算.使用寄存器只是更快吗?
编辑:那很快:)
给出了一些很好的答案; 根据第一个好的答案选择了最佳答案.
寄存器是计算机中最快的记忆.因此,如果我们想要建立一个只有寄存器而不是缓存的计算机,是否可能?我想甚至用寄存器替换磁盘,尽管它们是自然易失性的存储器.我们是否有一些非易失性寄存器用于此用途?它会变得如此之快!我只是想知道这是否可能发生?
嗨,我一直在各种文档中阅读这种东西
寄存器
告诉编译器将声明的变量存储在CPU寄存器中.
在标准C语言中,关键字注册使用以下语法:
注册数据定义; 寄存器类型修饰符告诉编译器将声明的变量存储在> CPU寄存器(如果可能)中,以优化访问.例如,
注册int i; 请注意,当优化打开时,TIGCC会自动将经常使用的变量存储在CPU寄存器中,但是如果关闭优化,关键字寄存器将强制存储在寄存器中.但是,如果编译器断定没有足够的空闲寄存器在>这个地方使用,则可能会拒绝在寄存器中存储数据的请求.
我的观点不仅仅是注册.我的观点是为什么编译器会将变量存储在内存中.编译器业务只是编译和生成目标文件.在运行时,实际的内存分配发生.为什么编译器会做这项业务.我的意思是没有运行目标文件只是通过编译文件本身在c的情况下发生内存分配吗?