编译32位_32位程序和64位程序这些区别你知道吗?

本文探讨了32位和64位程序在代码、可执行文件和内存使用上的区别,并提供了编写兼容两者代码的原则,包括数据类型的长度、字节对齐和结构体传递等注意事项。
摘要由CSDN通过智能技术生成

来源:公众号【编程珠玑】

作者:守望先生

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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值