zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    JAVA深入研究——Method的Invoke方法。
    java String->float,float->int
    Java中Object转化为int类型
    Android使用SeekBar
    转: 最值得阅读学习的 10 个 C 语言开源项目代码
    Eclipse快捷键列表大全
    Android使用的Eclipse NDK开发较详细一篇文章
    rm 删除带空格的文件或者目录
    man命令中的文本操作
    androidSDK无法更新的解决方法之一
  • 原文地址:https://www.cnblogs.com/kekec/p/2153449.html
Copyright © 2011-2022 走看看