请问32位这个"32" 到底是什么意思

时间:2022-09-20 03:32:11
比如现在一般PC都说是 32位机

我在网上看了一些资料   大多都这么形容内存的:
 
 -----------------------------
|     32位                    |
------------------------------
|     32位                    |
------------------------------
.
.
.
------------------------------
|     32位                    |
------------------------------

那么 比如我在一个函数中这样定义     char a;  这个变量a要占一个byte 也就是8位

那么意思是不是那32位中 只有8位被用了啊?

12 个解决方案

#1


数据线有32条……

#2


一个字节有8位,4个字节就是32位啊!
32位也就是说他的地址线有32位,可以访问的地址有2^32个地址

#3


哦 是这样啊

那内存的分布是怎么样的呢

是不是每32位 是一个单元来算的? 我看到很多书上都是象上面那样画内存的

#4


32位的地址线,所以,每个存储单元也是有一个 32位的地址来对应。

同时,数据线也是32位,所以,对应每个32位地址的数据量也就是32位的。 这里32位可以分为高16位,低16位。。 

如果还是分不清楚,建议你看看8086/8088的区别!

#5


内存的每个单元仍然是8位,但表示内存单元的地址是32位,所以可以管理的内存(寻址范围)是2^32个字节。

#6


字长

#7


处理器的位数是以其通用寄存器的宽度,更准确地说是以其整数常规运算指令(加、减、乘、除、移位、转移等)能处理的数据宽度决定的。
与数据总线、地址总线的宽度没有必然的联系。
比如8088有20位地址线,但它仍然是16位(或者说准16位)处理器,而Pentium+有64位数据线,但仍然是32位处理器。

#8


#9


DelphiGuy()说得不错。

#10


不过更严格地说是在指令上,数据能被处理的最大宽度。

比如Blackfin的累加器有40位,但是任何一种指令最多只能处理32位数据,因此仍为32位。

当然,处理8位、16位也是可以的。

#11


大家都在说,我也说点相似的。
从程序角度看的话,如果你使用的是32位编译器的话,程序将会根据声明序列安排实际使用多少位,如果声明char之后,再来一个int,那么char实际占内存为32位(4字节),如果连续声明两个或都多个,那么编译器一般会使用重叠形式,也就是说1-4个char占用内存将会是32位。
如果从机器角度看的话,DelphiGuy()说得比较明白。

#12


32位:因为通用寄存器(eax、ebx、ecx、edx)是32位的


x86体系是按字节来寻址的
而不是像某些计算机那样按字来寻址的


按32位边界对齐的数据能有效地利用数据总线带宽,提高数据传送速度
所以32位编译器一般是按32位对齐的
同理64位编译器一般是按64位对齐的

由于现代CPU内部集成Cache
所以不对其数据对速度的影响没有以前那么严重:
没有Cache时,访问不对其数据得访问两次内存。由于现代CPU主频极高,所以会浪费几十个时钟周期。
有Cache时,访问不对其数据得访问两次Cache。由于Cache与CPU同频率工作,所以只浪费1个时钟周期。



从Pentium开始,数据总线就是64位了
所匹配的是64位的SDRAM内存条
或者你得插两根32位的72线内存条,否则开不了机
为什么要这样设计呢?

还记得很多书上说“DRAM的速度是70ns左右”吗?
1s / 70ns = 10^9ns / 70ns = 14285714.285714285714285714285714Hz ≈ 14MHz
所以理论上DRAM的频率极限是14MHz
即外频无法超过14MHz

那么现在好几百MHz的外频是怎么实现的呢?

答案就是使用SDRAM——同步内存
以前,CPU每访问一次内存就从内存中装载一个字(数据总线宽度)的数据
而现在,先花几个时钟周期让SDRAM锁定地址,然后每一个时钟周期都顺序传递数据

等等,CPU不是访问一个变量吗,怎么现在要传递那么的东西?
回顾一下,实际上CPU是向Cache请求数据。只有在Cache没有该数据时,Cache才向内存调入数据。
既Cache能保证CPU随机地址访问需求,而SDRAM能实现内存到Cache高速的数据传输

所以此时数据总线越宽效果越好(能加快内存到Cache高速的数据传输)
于是Pentium将数据总线宽度设计成64位

#1


数据线有32条……

#2


一个字节有8位,4个字节就是32位啊!
32位也就是说他的地址线有32位,可以访问的地址有2^32个地址

#3


哦 是这样啊

那内存的分布是怎么样的呢

是不是每32位 是一个单元来算的? 我看到很多书上都是象上面那样画内存的

#4


32位的地址线,所以,每个存储单元也是有一个 32位的地址来对应。

同时,数据线也是32位,所以,对应每个32位地址的数据量也就是32位的。 这里32位可以分为高16位,低16位。。 

如果还是分不清楚,建议你看看8086/8088的区别!

#5


内存的每个单元仍然是8位,但表示内存单元的地址是32位,所以可以管理的内存(寻址范围)是2^32个字节。

#6


字长

#7


处理器的位数是以其通用寄存器的宽度,更准确地说是以其整数常规运算指令(加、减、乘、除、移位、转移等)能处理的数据宽度决定的。
与数据总线、地址总线的宽度没有必然的联系。
比如8088有20位地址线,但它仍然是16位(或者说准16位)处理器,而Pentium+有64位数据线,但仍然是32位处理器。

#8


#9


DelphiGuy()说得不错。

#10


不过更严格地说是在指令上,数据能被处理的最大宽度。

比如Blackfin的累加器有40位,但是任何一种指令最多只能处理32位数据,因此仍为32位。

当然,处理8位、16位也是可以的。

#11


大家都在说,我也说点相似的。
从程序角度看的话,如果你使用的是32位编译器的话,程序将会根据声明序列安排实际使用多少位,如果声明char之后,再来一个int,那么char实际占内存为32位(4字节),如果连续声明两个或都多个,那么编译器一般会使用重叠形式,也就是说1-4个char占用内存将会是32位。
如果从机器角度看的话,DelphiGuy()说得比较明白。

#12


32位:因为通用寄存器(eax、ebx、ecx、edx)是32位的


x86体系是按字节来寻址的
而不是像某些计算机那样按字来寻址的


按32位边界对齐的数据能有效地利用数据总线带宽,提高数据传送速度
所以32位编译器一般是按32位对齐的
同理64位编译器一般是按64位对齐的

由于现代CPU内部集成Cache
所以不对其数据对速度的影响没有以前那么严重:
没有Cache时,访问不对其数据得访问两次内存。由于现代CPU主频极高,所以会浪费几十个时钟周期。
有Cache时,访问不对其数据得访问两次Cache。由于Cache与CPU同频率工作,所以只浪费1个时钟周期。



从Pentium开始,数据总线就是64位了
所匹配的是64位的SDRAM内存条
或者你得插两根32位的72线内存条,否则开不了机
为什么要这样设计呢?

还记得很多书上说“DRAM的速度是70ns左右”吗?
1s / 70ns = 10^9ns / 70ns = 14285714.285714285714285714285714Hz ≈ 14MHz
所以理论上DRAM的频率极限是14MHz
即外频无法超过14MHz

那么现在好几百MHz的外频是怎么实现的呢?

答案就是使用SDRAM——同步内存
以前,CPU每访问一次内存就从内存中装载一个字(数据总线宽度)的数据
而现在,先花几个时钟周期让SDRAM锁定地址,然后每一个时钟周期都顺序传递数据

等等,CPU不是访问一个变量吗,怎么现在要传递那么的东西?
回顾一下,实际上CPU是向Cache请求数据。只有在Cache没有该数据时,Cache才向内存调入数据。
既Cache能保证CPU随机地址访问需求,而SDRAM能实现内存到Cache高速的数据传输

所以此时数据总线越宽效果越好(能加快内存到Cache高速的数据传输)
于是Pentium将数据总线宽度设计成64位