文档章节

x86/x86_64的一些基本概念

雅各宾
 雅各宾
发布于 2015/09/21 21:36
字数 1323
阅读 898
收藏 3

本人在构建boost的时候,从"Start Menu" -> "Programs" -> "Visual Studio 2015" -> "Visual Studio Tools" -> "Windows Desktop Command Prompts":
    VS2015 x64 ARM Cross Tools Command Prompt.lnk
    VS2015 x64 Native Tools Command Prompt.lnk
    VS2015 x64 x86 Cross Tools Command Prompt.lnk
    VS2015 x86 ARM Cross Tools Command Prompt.lnk
    VS2015 x86 Native Tools Command Prompt.lnk
    VS2015 x86 x64 Cross Tools Command Prompt.lnk

开始郁闷于
    VS2015 x64 Native Tools Command Prompt.lnk
    VS2015 x64 x86 Cross Tools Command Prompt.lnk

此两者的区别。

区别在这里
    %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" amd64
    %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"" amd64_x86

而vcvarsall.bat内容如下

    @echo off
    if "%1" == "" goto x86
    if "%2" == "" goto check_platform
    if not "%2" == "store" goto usage
    :check_platform
    if /i %1 == x86       goto x86
    if /i %1 == amd64     goto amd64
    if /i %1 == x64       goto amd64
    if /i %1 == arm       goto arm
    if /i %1 == x86_arm   goto x86_arm
    if /i %1 == x86_amd64 goto x86_amd64
    if /i %1 == amd64_x86 goto amd64_x86
    if /i %1 == amd64_arm goto amd64_arm
    goto usage
    :x86
    if not exist "%~dp0bin\vcvars32.bat" goto missing
    call "%~dp0bin\vcvars32.bat" %2
    goto :SetVisualStudioVersion
    :amd64
    if not exist "%~dp0bin\amd64\vcvars64.bat" goto missing
    call "%~dp0bin\amd64\vcvars64.bat" %2
    goto :SetVisualStudioVersion
    :arm
    if not exist "%~dp0bin\arm\vcvarsarm.bat" goto missing
    call "%~dp0bin\arm\vcvarsarm.bat" %2
    goto :SetVisualStudioVersion
    :x86_amd64
    if not exist "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat" goto missing
    call "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat" %2
    goto :SetVisualStudioVersion
    :x86_arm
    if not exist "%~dp0bin\x86_arm\vcvarsx86_arm.bat" goto missing
    call "%~dp0bin\x86_arm\vcvarsx86_arm.bat" %2
    goto :SetVisualStudioVersion
    :amd64_x86
    if not exist "%~dp0bin\amd64_x86\vcvarsamd64_x86.bat" goto missing
    call "%~dp0bin\amd64_x86\vcvarsamd64_x86.bat" %2
    goto :SetVisualStudioVersion
    :amd64_arm
    if not exist "%~dp0bin\amd64_arm\vcvarsamd64_arm.bat" goto missing
    call "%~dp0bin\amd64_arm\vcvarsamd64_arm.bat" %2
    goto :SetVisualStudioVersion
    :SetVisualStudioVersion
    set VisualStudioVersion=14.0
    goto :eof
    :usage
    echo Error in script usage. The correct usage is:
    echo     %0 [option]
    echo   or
    echo     %0 [option] store
    echo where [option] is: x86 ^| amd64 ^| arm ^| x86_amd64 ^| x86_arm ^| amd64_x86 ^| amd64_arm
    echo:
    echo The store parameter sets environment variables to support
    echo   store (rather than desktop) development.
    echo:
    echo For example:
    echo     %0 x86_amd64
    echo     %0 x86_arm store
    goto :eof
    :missing
    echo The specified configuration type is missing.  The tools for the
    echo configuration might not be installed.
    goto :eof

也就是说,区别在于

    :x86_amd64
    if not exist "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat" goto missing
    call "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat" %2
    goto :SetVisualStudioVersion


    :amd64_x86
    if not exist "%~dp0bin\amd64_x86\vcvarsamd64_x86.bat" goto missing
    call "%~dp0bin\amd64_x86\vcvarsamd64_x86.bat" %2
    goto :SetVisualStudioVersion

之间

亦即
    x86_amd64\vcvarsx86_amd64.bat

    amd64_x86\vcvarsamd64_x86.bat
之间的区别

用beyond compare比较它两,差不多两百行的脚本比较,我就傻在这里了 ...

然后我查有关计算机体系架构的资料,有太多似是而非或者聊当放屁的“文章”,而以下一文对我有些许帮助:

现在的x86 CPU在位数上有32/64bit之分,在ARCH上有又x86/x86_64/x64/i386/IA32/IA64/amd64,最近又新出来一个x32,还好不是ARCH,只是ABI,没有那么混乱。


先说一下x86的这些arch,不要求很严格的话,基本上可以用下面的公式来表达:

x86=i386=IA32

amd64=x86_64=x64!=IA64

其实这两个等式里很多都是别名,严格说的话,x86的世界里只存在x86/x86_64/IA64三种架构。

当年AMD先于Intel推出向下兼容的amd64 CPU,而Intel推出的不兼容32位系统的IA64惨淡收场(被MS放了鸽子),后来Intel在指令上支持了amd64,不过不愿意叫amd64,改了个名字x86_64。


再说64bit/32bit的兼容性问题:

现在的64bit CPU实际上都做了兼容32bit的特殊设计,所以64bit的CPU上运行32bit的软件(包括kernel/app, driver除外)是没有问题。反过来,32bit的CPU上运行64bit的软件是不可以的。


最后说重点,64bit相比32bit的性能优势:

这里不考虑64bit硬件上运行32bit软件的这种过度方式。

从架构上来说,64bit拥有64bit 的register和64bit的bus,在数据传输效率上比32bit要高不少;另外,64bit地址总线的寻址空间突破了4G的限制。

所以,对于大内存,密集数据运算的应用场景,64bit的优势是非常明显的。网上有一些benchmark,这里不贴了。


但是,对于小内存系统,64bit的CPU在某些状况下可能比32bit CPU的效率更低。

因为64 bit的CPU的地址是64位的,指针是64位的,编译生成的二进制文件更大,运行时占用的内存更多;另一方面,因为64位地址的问题,cache中能存放的指令就更少,所以更容易导致cache的miss。


所以在某些应用场景,64 bitCPU的更大的寻址空间,更快的数据传递,更快的浮点运算的特性, 与其64 bit的地址/指针所导致的cache miss的特性,始终并存。


为了充分利用64的优势,又避免64bit地址导致的cache miss的问题,Intel提出了x32 ABI的概念。

x32不是一个ARCH,是一个ABI。

x32可以充分的使用64 bit硬件的64 bit寄存器,64bit总线,以及64bit新增的指令,从而获得更快的数据处理速度。

同时x32又使用32bit的地址/pointer,32bit的C数据类型,因此cache miss并不会增加。


x32是一个ABI,其设计到的部分包括:kernel的support,toolchain的support,system lib的support。现在kernel(from 3.4)和toolchain的support都已经OK。



refrence:

http://blog.claudxiao.net/2012/05/x32-abi/

http://blog.csdn.net/force_eagle/article/details/7860574


但就算看到如此,我还是没有搞懂
    x86_amd64\vcvarsx86_amd64.bat

    amd64_x86\vcvarsamd64_x86.bat
之间的区别


本文转载自:http://blog.chinaunix.net/uid-25871104-id-3424668.html

雅各宾
粉丝 9
博文 126
码字总数 53538
作品 0
深圳
技术主管
私信 提问
gcc/g++编译选项: -fPIC

在理解PIC概念之前,先了解一下动态链接库的载入时重定位概念。 载入时重定位: 我们知道,Linux的可执行文件一般是elf格式的,在这个可执行文件的头部包含了很多重要的信息:如文件格式,加...

yepanl
2018/10/03
1K
0
CentOS 7.1 (1503) 发布

CentOS 7.1 源自 Redhat 7.1 更新,主要是组件工具和安全更新。 CentOS 7 (1503) 发布,此版本包括一些新特性:IPA 重要更新;添加对 two-factor 验证支持。其他改进包括 OpenJDK 8,Thunder...

clouddyy
2015/04/01
14.4K
30
Mixing x86 with x64 code (混合编写x86和x64代码)

摘要: 几个月前我小小的研究了在WOW64下的32位进程中运行native x64代码。第二个设想是在64位进程下运行x86代码。它们都是可以的,如我google的一样,已经有人在使用这两种方法了:●http://...

伽罗kapple
2016/01/24
239
0
Percona-XtraDB 9.1 版本发布

XtraDB 是一个MySQL 的存储引擎,其设计的主要目的是用以替代现在的 InnoDB 。XtraDB 100%的兼容 InnoDB 。 从该版本开始 XtraDB 数据库存储引擎改名为 Percona-XtraDB 。 新版本的主要改进内...

红薯
2010/03/15
660
1
CPU位数,寻址能力,指令集,寄存器位数,操作系统位数

part 1 CPU位数 = CPU中寄存器的位数 = CPU能够一次并行处理的数据宽度 = 数据总线宽度 操作系统位数 = 其所依赖的指令集位数 <= CPU位数 CPU寻址能力 = 2^S (s为地址总线宽度) <= CPU位数 ...

ChenQi
2012/08/04
2.8K
3

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
7
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部