windows下 32位程序迁移到64位程序注意步骤

64位程序,最大优势是可以使用的进程地址空间(即虚拟内存)可以达到2^64,(注意:实际上在X86 64位架构上,实际地址为48位),

而在32位机器上,windows默认是用户可使用2GB地址空间(用户),另外2GB属于操作系统使用(内核os),在Linux下则是3GB(用户),1GB(os).

 

由于现代程序进程常常需要使用很大地址范围,因此,2GB通常是不够的(在windows下,有的系统如2000server,通过向启动配置添加 /3GB 开关并使用 /LARGEADDRESSAWARE 开关重新链接应用程序,可以将这种平衡调整为 3GB 用户空间和 1GB 内核空间。但,本人windows XP系统 试过2次,结果蓝屏告终,建议不要轻易尝试这个,后果自负)。

 

windows下程序需要从32位迁移到64位程序基本步骤

  • (1)区别程序数据类型

 

类型32位64位
char11
short22
int44
long48
WORD22
DWORD == unsigned long48
void*(指针类型)48
__int6488
size_t == unsigned int48
SIZE_T == unsigned long48
float44
double88
long long88

 

因此,在基本数据类型中,实际只有long 和指针类型发生了变化。

 

操作系统默认用户空间大小
Windows x86-648192GB
Windows Itanium7152GB
Linux x86-64500GB
Linux PPC641648GB
Linux 390 644EB
  • (2)检查程序

程序中,凡使用了DWORD,long,SIZE_T,指针字节长度发生变化的,都需要注意了

特别注意 sizeof(),这个运算符号。

 

结构体:结构体有个对齐方式,可以通过编译指令设置,也可以在工程中设置。

windows,vc编译器下:

#pragma pack(字节数),

 

#pragma pack(),如果里面任何字节数,表示使用编译器默认对齐方式。

gcc下:

 __attribute__   ((aligned   (字节位数)));

 

通常,32位程序升级到64位,出错的地方在于读写文件,比如读写一个long或者其扩展的类型(DWROD,SIZE_T,UNIT_PTR等等),读写一个指针。

 

  • (3)编译调试运行,OK了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值