• Visual Studio中Debug与Release以及x86、x64、Any CPU的区别 &&&& VS中Debug与Release、_WIN32与_WIN64的区别


    本以为这些无关紧要的 Debug与Release以及x86、x64、Any CPU 差点搞死人了。

    看了以下博文才后怕,难怪我切换了一下模式,程序就pass了。。。。

    转载:

    1.https://www.cnblogs.com/xxn-180727/p/9442992.html

    2.https://www.cnblogs.com/netserver/p/11106130.html

    一、Debug与Release

    1.  区别   

        Debug——调试版,生成的.exe中包含很多调试信息,若直接发包,比较大;

        Release——发布版

    2.  如何区分是Debug编译还是Release编译

        Debug编译有宏定义_DEBUG,若代码中定义了_DEBUG就表示是debug编译,否则是release

        编译。

        Eg:    #ifdef _DEBUG
        ........     // 调试时执行,发布时不执行
        #else
        ........     //
     

    二、_WIN32与_WIN64

    1.  定义

      _WIN32是32位编译; _WIN64是64位编译。

      之所以要分不同位数编译,最根本的目的就是提高软件的通用性,先了解几点常识:

    • 如果电脑操作系统位数不同,那么代码中基本数据类型所占的字节也不同。

         如:32位平台下long long是8个字节(64位),而64位平台下,long 是8个字节(64位)

    • 64位操作系统理论上可以运行32位和64位软件,而32位操作系统只能运行32位的软件。

           那么如何使软件在不同平台运行?方法就是宏定义:

    Eg:# ifdef _WIN64
            typedef long int  int64_t;
            # else
            _extension_
            typedef long long int int64_t;

    2.  如何区分是32位编译还是64位编译

           在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。在 x64 配置下,两者都有定义。

         可以理解为32位不支持64位,而64位可以兼容32位。总之在 VC 下,_WIN32 一定有定义。

        因此,_WIN64 用来判断编译环境是 32位 还是 64位,而WIN32或者_WIN32 可以用来
         判断是否 Windows 系统(对于跨平台程序)。
         一般VS选用win32控制台程序,和win32编译方式,因为兼容性比较好,可以在32位操作
         系统上运行,也可以在64位操作系统上运行。
    3,应用场合
    1 #ifdef _WIN64            // 说明是64位编译方式
    2 typedef long long  intptr_t;
    3 #else 
    4 typedef _W64 int intptr_t; 5 #endif

    Visual Studio中Debug与Release以及x86、x64、Any CPU的区别

     

    Visual Studio中Debug与Release的区别:

          在Visual Studio中,编译模式有2种:Debug与Release。这也是默认的两种方式,在新建一个project的时候,就已经存在这两种模式供选择。

          Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
          Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

    SO:
          一般都是用Release来打包发布程序,因为Release做了更多的优化,运行速度更快,适合在项目完成后部署,另外,Release打包出来的程序文件也相对来说会小一些。而Debug模式更适合在开发调试的时候使用。即:开发调试的时候使用Debug模式,打包发布程序用Release模式。

    Visual Studio中x86、x64、Any CPU的区别:

    1、简单的说,它们之间最直接的区别就是:x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,若操作系统是64位的,编译出来的就是64位程序。

    2、若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集…或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。
    反之,若主程序是由x64平台编译出来的,而dll是x86的呢?答案。。也是不行的!
    说到这里,基本上可以确定一点:dll和主程序的生成平台只要一致就可以
    那么问题来了!若主程序是Any CPU编译的,而dll是由x86或者x64平台编译的,又或者,主程序是x86或者x64平台编译的,而dll是由Any CPU编译的呢?正确答案就是两者在“特殊情况”下都是可行的。为什么说是“特殊情况”下呢?因为第一点也提到了,Any CPU取决于操作系统,而结合第二点提到的只要dll和主程序的生成平台一致,那么也是可行的。所以,由上可知:若主程序是在Any CPU平台下编译的,那么编译dll的平台必须要和编译主程序的操作系统一致才行。若主程序是在x86或者x64平台下编译的,那么dll就必须要和主程序一致。不过有个特例:若dll由Any CPU编译的,那么这个dll就可以被32位和64位的主程序调用。这是为什么呢?请看第三点。

    3、虽说Any CPU编译出来的程序取决于操作系统,但是由Any CPU编译出来dll则取决于调用它的主程序,即若主程序是32位的,那么dll也是32位的,若主程序是64位的,那么dll就是64位的。所以dll一般采用Any CPU平台编译,而主程序(exe)一般采用x86平台编译。

    总结:了解了它们的区别之后,我们打包程序的时候就知道如何取舍了。一般来说,在不清楚客户的电脑是什么类型的操作系统的情况下,或者两者都有的时候,则主程序采用x86平台编译,dll采用Any CPU平台编译。若清楚的知道是64位操作系统,那么就可以都按x64平台编译了。

  • 相关阅读:
    产生财务计帐周期
    判断指定年份是否为闰年
    判断是否是闰年
    Regex quick reference
    组合外键(FOREIGN KEY)
    多列组合为主键(PRIMARY KEY)
    获取字符串开始的地址(案例)
    获取字符串结尾的电话号码(案例)
    ms sql server line feed
    如何产生连续时间?(案例)
  • 原文地址:https://www.cnblogs.com/MCSFX/p/12670888.html
Copyright © 2020-2023  润新知