32位和64位与虚拟地址之间和字节数的问题

本文介绍了32位和64位CPU处理位数的区别,指出32位CPU能处理4字节数据,虚拟地址空间为4GB,而64位CPU则处理8字节数据,虚拟地址空间扩大到128GB。同时,讨论了不同系统下数据类型如int、long和long long的字节数,强调了long类型的字节数在不同体系结构中可能变化。

32位是cpu一次处理的位数,即32位4字节,相当于地址的宽度,即sizeof(*p);

虚拟地址大小为4G,即有2的32次方个地址,从32个0到32个1个地址;

64位是cpu一次处理的位数,即64位8字节,相当于地址的宽度,即sizeof(*p);

虚拟地址大小为128G,即有2的64次方个地址,从64个0到64个1个地址;


32位

char    1字节

char*     4字节(寻址范围)

short int    2字节

int     4字节   

unsigned int     4字节

long    4字节

long long     8字节


64位

char    1字节

char*     8字节(寻址范围)

short int    2字节

int     4字节   

unsigned int     4字节

long    8字节

long long     8字节


总结:

    int和longlong是不变的,long是可变化的


虚拟地址主存地址数在计算机存储系统中是两个不同的概念,它们存在多方面的区别: ### 定义作用 - 虚拟地址数是指在虚拟内存系统中,用于表示虚拟地址的二进制数。虚拟地址是程序所使用的地址,操作系统通过地址映射机制将虚拟地址转换为物理地址。这使得每个进程可以拥有一个独立的、连续的地址空间,方便程序的编写管理,并且可以让多个进程共享物理内存资源。例如,在32虚拟地址空间中,虚拟地址数为32,可表示的虚拟地址范围是$2^{32}$个地址单元。 - 主存地址数是指用于表示主存物理地址的二进制数。主存地址直接对应物理内存中的存储单元,计算机通过主存地址来访问实际的物理内存。例如,若主存地址数为20,则可表示的主存物理地址范围是$2^{20}$个存储单元。 ### 地址空间大小 - 虚拟地址数决定了虚拟地址空间的大小。虚拟地址空间可以远远大于物理主存的大小,它为程序提供了一个巨大的、连续的地址空间,使得程序可以使用比实际物理内存更多的内存。例如,64虚拟地址空间,其大小为$2^{64}$个地址单元,这是一个非常巨大的数值。 - 主存地址数决定了主存物理地址空间的大小。主存地址空间受限于计算机系统中实际安装的物理内存容量。例如,一台计算机安装了4GB的物理内存,主存地址数可能为32(因为$2^{32}$字 = 4GB)。 ### 地址映射关系 - 虚拟地址需要通过地址映射机制(如页表)转换为主存物理地址。在虚拟内存系统中,操作系统会维护一个页表,用于记录虚拟页与物理页之间的映射关系。当程序访问虚拟地址时,硬件会根据页表将虚拟地址转换为主存物理地址。由于虚拟地址空间通常比主存物理地址空间大,可能会出现多个虚拟页映射到同一个物理页的情况,或者某些虚拟页暂时没有对应的物理页(即页面不在主存中),需要进行页面置换操作。 - 主存地址直接对应物理内存中的存储单元,不需要进行地址转换。计算机系统可以直接根据主存地址访问物理内存中的数据。 ### 应用场景 - 虚拟地址的使用使得程序开发更加方便,程序员可以在一个连续的、独立的地址空间中编写程序,而不需要考虑物理内存的实际布局限制。同时,虚拟内存技术还可以实现内存保护、内存共享等功能,提高了系统的安全性资源利用率。 - 主存地址主要用于计算机硬件对物理内存的访问管理。硬件通过主存地址来读写物理内存中的数据,保证了计算机系统的高效运行。 ```python # 示例代码:简单模拟虚拟地址到物理地址的转换 # 假设页大小为 4KB(2^12 字) PAGE_SIZE = 2**12 # 定义一个简单的页表,这里用字典表示 page_table = { 0: 10, # 虚拟页 0 映射到物理页 10 1: 11, # 虚拟页 1 映射到物理页 11 2: 12 # 虚拟页 2 映射到物理页 12 } def virtual_to_physical(virtual_address): # 计算虚拟页号页内偏移 virtual_page_number = virtual_address // PAGE_SIZE page_offset = virtual_address % PAGE_SIZE # 检查页表中是否存在该虚拟页的映射 if virtual_page_number in page_table: # 获取对应的物理页号 physical_page_number = page_table[virtual_page_number] # 计算物理地址 physical_address = physical_page_number * PAGE_SIZE + page_offset return physical_address else: # 若页表中不存在该虚拟页的映射,返回 -1 表示页面缺失 return -1 # 测试虚拟地址转换 virtual_address = 0x1000 # 虚拟地址 physical_address = virtual_to_physical(virtual_address) if physical_address != -1: print(f"虚拟地址 {hex(virtual_address)} 转换为物理地址 {hex(physical_address)}") else: print(f"虚拟地址 {hex(virtual_address)} 页面缺失") ```
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值