本以为这些无关紧要的 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以及x86、x64、Any CPU的区别之总结:开发调试的时候使用Debug模式,打包发布程序用Release模式。主程序采用x86平台编译,dll采用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平台编译了。

Visual Studio中Debug与Release以及x86、x64、Any CPU的区别 &&&& VS中Debug与Release、_WIN32与_WIN64的区别的更多相关文章

  1. 关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别

    相信对于很多刚接触打包程序的同志来说,关于x86,x64,Any CPU这三个项目平台,以及解决方案配置Debug和Release有什么区别?这个问题一定有许多的困惑,甚至不乏一些已经工作了很久的老程 ...

  2. 使用Visual Studio Team Services敏捷规划和项目组合管理(二)——VSTS中的工作项

    使用Visual Studio Team Services敏捷规划和项目组合管理(二)--VSTS中的工作项 1.通过project/team下拉菜单选择MyHealthClinic\Web,导航到W ...

  3. visual studio 2017 创建 android 本地共享库(.so) 并从 C# android 项目中调用

    Developing Xamarin Android Native Applications ★★★★★ ★★★★ ★★★ ★★ ★ February 23, 2015 by Ankit Asthan ...

  4. VS中Debug与Release、_WIN32与_WIN64的区别

    一.Debug与Release 1.  区别 Debug——调试版,生成的.exe中包含很多调试信息,若直接发包,比较大: Release——发布版 2.  如何区分是Debug编译还是Release ...

  5. VS项目平台的x86,x64,Any CPU以及Debug和Release

    引用链接:https://blog.csdn.net/zuguangboy/article/details/51509670

  6. Visual Studio Profiler 跟踪检查每个exe dll 性能 执行时间 CPU占用情况的方法

  7. Visual Studio启用64位 IIS Express 解决 x64位的dll 而出现 未能加载文件或程序集“xxxxxxxx”或它的某一个依赖项。试图加载格式不正确的程序。

  8. x86,x64,Any CPU区别

    https://blog.csdn.net/zuguangboy/article/details/51509670 1,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或 ...

  9. 微软 Visual Studio 14 CTP2 发布

    对于在微软阵营下进行工作的团队来说,拥有最新版本的 Visual Studio 是提高效率最佳的选择,没有之一. 在本文中,我们就上个月发布的 Visual Studio "14" ...

随机推荐

  1. 使用【QQ五笔的码表】转成【百度手机自定义码表】

    使用[QQ五笔码表]转成[百度手机自定义码表] QQ五笔码表先转成多多格式. 这里选用极点>>多多. 然后去掉空格. 转成GB.去掉没的字. 百度要的是这种格式. 现再用点讯工具转成 de ...

  2. jsBridge

    jsBridge https://www.dazhuanlan.com/2019/12/05/5de7eb50739df/ JSBridge的原理 https://juejin.im/post/5ab ...

  3. Unity中的枚举和标志

    译林军 宿学龙|2014-04-10 08:56|9007次浏览|Unity(377)0 枚举和标志 今天的主题是枚举,它是C#语言中的一个很有帮助的工具,可以增强代码的清晰度以及准确性. 枚举一系列 ...

  4. Mybatis源码学习第七天(插件源码分析)

    为了不把开发和源码分析混淆,决定分开写; 接下来分析一下插件的源码,说道这里老套路先说一个设计模式,他就是责任链模式 责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作,和装 ...

  5. IFile、File与实体转换

    /** * 根据物理实体文件在开发工程中创建实体文件 */ @Override public void getEntityFilesByErFile(IFile erfile, IFolder ent ...

  6. h5内嵌微信小程序,调用微信支付功能

    在小程序中不能使用之前在浏览器中配置的支付功能,只能调用小程序专属的api进行支付. 因为需要在现在实现的基础上,再添加在小程序中调用微信支付功能,所以我的思路是这样的 1.在点击支付按钮时,判断是不 ...

  7. JavaScript浮点数及其运算

    .普及两个函数Math.pow(底数,几次方)Number.toFixed(小数位数)2.浮点数相加function accAdd(arg1,arg2){   var r1,r2,m;   try{r ...

  8. pip更新命令

    python -m pip install --upgrade pip 更新时如果报错'NoneType' object has no attribute 'bytes', 解决办法:easy_ins ...

  9. ajax之---上传文件

    “伪”ajax向后台提交文件        <iframe style="display: none" id="iframe1" name="i ...

  10. Java虚拟机栈--栈帧

    栈帧的内部结构 每个栈帧中存储着 1.局部变量表(Local Variables) 2.操作数栈(Operand Stack)(或表达式栈) 3.动态链接(Dynamic Linking)(或执行&q ...