判断操作系统是16位还是32位的

这个问题有点模糊,因为用sizeof来判断等都是来测试的编译器的类型。

不使用sizeof的方法:

16位的系统下,
int i = 65536;
cout << i; // 输出0;
int i = 65535;
cout << i; // 输出-1;

32位的系统下,
int i = 65536;
cout << i; // 输出65536;
int i = 65535;
cout << i; // 输出65535;


#include <stdio.h>

void main(int argc,char** argv)
{
    int a[2];
    int byte = (char*)&a[1] - (char*)&a[0];

    printf("%d\n",byte);

}

#define OS_BITS (((int)((ptrdiff_t  *)0 + 1)) << 3)
调试发现:

  int *p=NULL; //0x00000000

  int *ptr = p + 1; //0x00000004

  int res = (int)ptr; // 4

  int myres = res <<3; //32

关键就是 p+1 后,移动了4个字节。

也就是说指针加法判断了系统位数。


因为想(int *)或者sizeof(int)都是由编译器处理的东西,它们的长度由编译器确定,并不受目标系统的影响。
应该使用系统通用的API来确定,比如GetVersion取的OSVERSIONINFO里dwPlatformId是1代表是Win9x/ME(16/32位混合),2代表WinNT。
或者更通用的方法是用汇编,读取CR0,如果是PE=1就是保护模式。
或者更直接的方法是直接用预编译开关来控制代码,比如#if defined WIN32什么的。

1 调用GetSystemInfo
会返给你一个SYSTEM_INFO结构

结构里
wProcessorArchitecture代表cpu架构,0是x86,9是x64  


2 Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE").IndexOf("64") != -1

如果为true则是64位的。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第1页。电大计算机本科操作系统作业及答案 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第1页。 《操作系统》课程作业(四) 姓名         班级         学号        一、选择题(选择一个正确答案的代码填入括号中) 通常,用户编写的程序中所使用的地址是( )。 A.逻辑地址 B.物理地址 C.绝对地址 D.内存地址 可由CPU调用执行的程序所对应的地址空间为( )。 A.符号名空间 B.虚拟地址空间 C.物理空间 D.逻辑地址空间 把逻辑地址转变为内存物理地址的过程称作( )。 A.编译 B.连接 C.运行 D.重定 经过( ),目标程序可以不经过任何改动而装入物理内存单元。 A.静态重定 B.动态重定 C.编译或汇编 D.存储扩充 动态重定是在程序( )期间,每次访问内存之前教学重定。 A.执行 B.编译 C.装入 D.修改 在分时系统中,可将进程不需要或暂时不需要的部分移到外存,让出内存空间以调入其他所需数据,称为( )。 A.覆盖技术 B.对换技术 C.虚拟技术 D.物理扩充 分区管理中进行分区的是主存的( )。 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第2页。A.系统区域 B.用户区域 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第2页。 C.程序区域 D.整个区域 分区管理要求对每一个作业都分配( )的内存单元。 A.地址连续 B.若干地址不连续 C.若干连续的页面 D.若干不连续的页面 固定分区中各分区的大小是( )。 A.相同的 B.相同或者不同,但预先固定 C.根据进程要求确定 D.随进程个数而定 动态分区管理方式下,分配作业的主存空间根据( )。 一张分区说明表 一张分区说明表和一张空闲分区表 一张"示图"构成的分区说明表 由系统自定 在存储管理中,为实现地址映射,硬件应提供两个寄存器,一个是基址寄存器。另一个是( )。 A.控制寄存器 B.程序状态字寄存器 C.限长寄存器 D.通用寄存器 可重定分区存储管理采用的地址转换公式是( )。 绝对地址=界限寄存器值+逻辑地址 绝对地址=下限寄存器值+逻辑地址 绝对地址=基址寄存器值+逻辑地址 绝对地址=块号?块长+页内地址 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第3页。最先适应分配算法把空闲区( ) 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第3页。 按地址顺序从小到大登记在空闲区表中 按地址顺序从大到小登记在空闲区表中 按长度以递增顺序登记在空闲区表中 按长度以递减顺序登记在空闲区表中 最容易形成很多小碎片的可变分区算法是( )。 A.最先适应算法 B.最佳适应算法 C.示图法 D.以上都不是 下列存储管理方案中,不采用动态重定的是( )。 A.页式管理 B.可变分区 C.固定分区 D.段式管理 在分页存储管理系统中,从页号到物理块号的地址映射是通过( )实现的。 A.段表 B.页表 C.PCB D.JCB 在页式存储管理系统中,整个系统的页表个数是( )个。 A.1个 B.2个 C.与页面数相同 D.和装入主存的进程个数相同 虚拟存储技术是( )。 A.扩充内存空间的技术 B.扩充相对地址空间的技术 C.扩充外存空间的技术 D.扩充输入输出缓冲区的技术 虚拟存储器的容量是由计算机的地址结构决定的,若CPU有32位地址,则它的虚拟地址空间为( )。 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第4页。 A.100K B.640K C.2G D.4G 电大计算机本科操作系统作业及答案定稿版全文共9页,当前为第4页。 在请求分页虚拟存储管理中,若所需页面不在内存中,则会引起( )。 A.输入输出中断 B.时钟中断 C.越界中断 D.缺页中断 下列存储管理方案中,不要求将进程全部调入并且也不要求连续存储空间的是( )。 A.固定分区 B.可变分区 C.页式存储管理 D.请求分页式存储管理 存储管理中,页面抖动是指( )。 使用机器时,屏幕闪烁的现象 被调出的页面又立刻被调入所形成的频繁调入调出现象 系统盘有问题,致使系统不稳定的现象 由于主存分配不当,偶然造成主存不够的现象 在页式虚拟存储管理系统中,LRU算法是指( )。 最早进入内存的页先淘汰 近期最长时间以来没被访问的页先淘汰 近期被访问次数最少的页先淘汰 以后再也不用的也先淘汰 二、判断题(正确的划 ,错误的划×。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值