64位平台简介

目前最流行的两种64bit微处理器架构: IA-64    Intel 64

IA-64 : 由Intel和Hewlett Packard公司联合开发,被使用在 Itanium和 Itanium 2微处理器之上。

Intel 64 :又称EM64T / AMD64 / IA-32e / x86-64 /AA-64/ x64/Hammer Architecture,是对原来x86架构的64位扩展,具有向后兼容性。

这两种架构是绝对不同的,不具有相互兼容性。下面以Intel 64在windows平台的情况进行介绍,将其称之为win64。

-------

64位架构有如下优势:

(1)64位地址总线空间   (这意味着程序可以使用更多内存)

(2)兼容32位应用程序

(3)兼容32位操作系统

-------

现代64位的操作系统,并不是所有的模块都是64位的。为了能使32位的程序能运行在win64之上,需要开启WoW64模式(Windows On Windows 64)。

『注:该模式为当前64位操作系统的缺省模式』WoW64为windows上的一个子系统,能使32位程序运行在win64之上。

注:win64不再兼容16位程序的运行;其内核模块必须是64位的,用户模块可以是32位的。

64位地址总线空间,理论上可寻址的内存地址空间可达2^64=16EB,但实际肯定没这么多。

目前,各版本的64位Windows能管理的内存数如下:

win64的程序模型

(1)内存页的大小和win32保持一致,为4KB.

(2)地址空间的前64KB,不可用; 即系统最低的内存地址为0x10000

(3)函数的参数不再通过stack来传递(直接通过寄存器来传递),这就意味着不再有调用约定(__stdcall, __cdecl, __fastcall

       这个不同决定了不可能在一个程序中既有32位的模块,又有64位的模块。因此,64位的程序不能加载一个32位的动态连接库,然后执行它的代码。

++

□ 32位程序在win64上使用更大内存需要开启链接参数  /LARGEADDRESSAWARE  这样该程序在win64可使用大约为4GB的内存.(实际通常为3.5GB左右)

   见“扩充windows应用程序可用内存数到3GB

□ 64位程序可以通过代理进程和COM技术来访问32位DLL  具体可参看这篇文章   Accessing 32-bit DLLs from 64-bit code

   然而,可以比较容易地将32位DLL中资源加载到64位程序中      -- 在LoadLibraryEx时指定LOAD_LIBRARY_AS_DATAFILE标志。

ILP32和LP64数据模型
32位环境涉及"ILP32"数据模型,是因为C数据类型为32位的int、long、指针。
而64位环境使用不同的数据模型,此时的long和指针已为64位,故称作"LP64"数据模型。
现今所有64位的类Unix平台均使用LP64数据模型,而64位Windows使用LLP64数据模型,除了指针是64位,其他基本类型都没有变。

关于更多64位平台的知识请参考:http://www.viva64.com/en/l/

http://software.intel.com/en-us/articles/lessons-on-development-of-64-bit-cc-applications/

原文地址:https://www.cnblogs.com/kekec/p/2153449.html