判断你的CPU是32位的还是64位

1,写一个C++程序,判断你的CPU是32位的还是64位的。
2,定义一个长整型常量(const),要求其所有的位都设置为1. 且在32位操作系统和64位操作系统上均有效果。
3,下列程序的在32位CPU和64位CPU上输出分别是什么?
Struct Data{
char i;
long j;
int k;
};
cout << sizeof(Data) << endl;


关于平滑迁移的一些资料在博客另外一篇文章《将Linux应用程序移植 到64位系统》已经讲清了。这里只给出解答。
1,判断下指针长度就可以了,32位系统指针是4个字节的(32位),64位系统指针是8字节 64bit的。
#define IS_64BIT_OS (sizeof(void *) == 8)

2.在64位操作系统 中,C++的long是64位的,int是32位的。在32位操作系统中,long和int都是32位的。因此用
const long M = 0xFFFFFFFF;是不行的,正确的写法如下:
const unsigned long M = -1L;
由于负数在系统中是补码存 放的,所以在32位和64位系统中所有的比特都会为1

3,第三题其实牵涉到个内存对齐的问题,这里在文章中有详细说到
在32位系 统中,输出是12
64位系统中,输出是24
这里还有个很有意思的问题:
Struct Data1
{
char i;
short j;
int k;
};
struct Data2
{
char i;
int k;
short j;
};
请问sizeof(Data1) == sizeof(Data2)吗?
答案是不相等的,因为对于 Data2,char占用1个字节,它需要对32位对齐,因此系统会从i字段后面填充3个字节。因此是 4 4 4 ,就是12个字节。
对于 Data1,char占用1个字节,short占用两个字节。因此系统会将j填充到i后面,之后再把k加上。于是占用 4 4 ,也就是8个字节。
VC6.0 环境下尝试过。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值