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位
char 1 1
short 2 2
int 4 4
long 4 8
WORD 2 2
DWORD == unsigned long 4 8
void*(指针类型) 4 8
__int64 8 8
size_t == unsigned int 4 8
SIZE_T == unsigned long 4 8
float 4 4
double 8 8
long long 8 8

 

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

 

操作系统 默认用户空间大小 Windows x86-64 Windows Itanium Linux x86-64 Linux PPC64 Linux 390 64
8192GB
7152GB
500GB
1648GB
4EB
  • (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了

 

 

你可能感兴趣的:(64位,升级)