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

来源:互联网 发布:淘宝权女友辣椒 编辑:程序博客网 时间:2024/04/29 07:50

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环境下尝试过。

原创粉丝点击