可可西

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/

posted on   可可西  阅读(622)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

统计信息

点击右上角即可分享
微信分享提示