来源:公众号【编程珠玑】
作者:守望先生
ID:shouwangxiansheng
我们在编写C/C++程序时,32位程序和64位程序的代码有何区别?如何编写既可以编译成32位程序又可以编译成64位程序的代码?
代码上的区别
实际上,对于32位程序和64位程序来说,代码上的区别不大,严格来说,甚至是一样的,它的主要区别在于一些基本数据类型占用的字节长度不一样(注:这里仅针对类Unix平台)
类型 | 32位占用字节 | 64位占用字节 |
---|---|---|
long | 4 | 8 |
unsigned long | 4 | 8 |
指针 | 4 | 8 |
当然这里的long包括一些用它定义的类型,如time_t,它的长度也是有区别的,关于time_t,还有一个有意思的问题《什么是2038问题》。
除此之外,其默认对齐字节数,也不一样,32位程序为4字节,64位程序默认为8字节。关于字节对齐,可参考《理一理字节对齐的那些事》。
可执行文件上的区别
来看个小例子吧,看看他们有何区别。
//来源:公众号编程珠玑
//作者:守望先生
test.c
#include
struct Test
{
int a;
long b;
};
int main(void){
printf("sizeof(long) = %zu\n",sizeof(long)); //long类型占用字节数
printf("sizeof(unsigned long) = %zu\n",sizeof(unsigned long));//unsigned long类型占用字节数
struct Test t