首页 > 其他分享 >VS项目调试x86,x64,any cpu的区别

VS项目调试x86,x64,any cpu的区别

时间:2023-05-04 14:45:15浏览次数:49  
标签:主程序 x86 32 x64 dll 编译 64 cpu

VS项目调试x86,x64,any cpu的区别?

1、对应的编译出来的程序位数不同。

x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。

x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,反之编译出来的就是64位程序。

1)若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集…或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。

这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。

同理,若主程序是由x64平台编译出来的,而dll是x86,也不行。64位程序不能加载32位的dll,更不能调用其中的类、方法和对象。

综上,dll和主程序的生成平台必须一致。

2)若主程序是Any CPU编译的,而dll是由x86或者x64平台编译的,又或者,主程序是x86或者x64平台编译的,而dll是由Any CPU编译的。两者在“特殊情况”下是可行的。

若主程序是在Any CPU平台下编译的,那么编译dll的平台必须要和编译主程序的操作系统一致才行。若主程序是在x86或者x64平台下编译的,那么dll就必须要和主程序一致(铁则)。

若dll由Any CPU编译的,那么这个dll就可以被32位和64位的主程序调用。

原因:虽说Any CPU编译出来的程序取决于操作系统,但是由Any CPU编译出来dll则取决于调用它的主程序,即若主程序是32位的,那么dll也是32位的,若主程序是64位的,那么dll就是64位的。

综上,在不清楚客户的电脑是什么类型的操作系统的情况下,或者两者都有的时候,主程序一般采用x86平台编译,dll一般采用Any CPU平台编译。

 

2、如果你的系统是64位,默认编译为64位程序,而如果需要编译为32位程序,则需要带上-m32参数。如果你的系统是32位的,那么是不能直接运行64位程序的,但是如果是64位的,是可以运行32位程序的。

 

3、VS的配置管理器Debug、Release的区别

1)Debug为调试版本,能设置断点,单步调试,使用TRACE/ASSERT等调试输出日志。Debug调试版本包含调试信息,不做任何优化,为开发人员提供。

2)Release为发布版本,是为用户使用的。客户不允许在发布版本上进行调试,不保存调试信息。Release是会被自动优化的,程序效率更高。

Debug版本采用了一些保护机制来帮助发现错误,Debug版本的Runtime Liabrary(运行时库)加强了错误检测。

应当指出,如果Debug有错误,而Release版本正常,程序肯定是有 Bug的,只是我们还没有发现。

Debug一般是Od,即禁用编译器优化的。而Release一般是O2,创建最快速的代码。

在Debug版本ASSERT、TRACE才有用。Release版本默认NDEBUG。assert语句会被认为是空语句。

注意:Debug和Release版本的DLL一定不能混用。

 

标签:主程序,x86,32,x64,dll,编译,64,cpu
From: https://www.cnblogs.com/wyj510/p/17371160.html

相关文章

  • Vmware虚拟机热添加CPU与内存
    vCenter版本:7.0.3ESXi版本:7.0.3 在配置CPU的时候,勾选EnableCPUHotPlug,这样就可以在线添加CPU而不用关机虚拟机了。在配置Memory的时候,勾选EnableMemoryHotPlug,这样就可以在线添加内存而不用关机虚拟机了。如果要降低配置,需要将虚拟机关机之后才可以操作;—————......
  • chrome 高cpu占用 性能分析
    VisualStudio性能探查器WindowsPerformanceToolkitPerfView应该只能用于.NET尝试了chrome://tracing/,但是暂时没太看懂里面都是什么意思 搜着搜着发现了一个UIforETW,这个好像是专门用于chrome的EventTracingforWindows(ETW),所以试用了一下msiexec.exe/i"C:\User......
  • 一文搞懂 x64 IA-64 AMD64 Inte64 IA-32e 架构之间的关系
    想要搞清楚x64、IA64、AMD64指令集之间的关系,就要先了解Intel和AMD这两家公司在生产处理器上的发展历史。x86处理器1978年Intel生产了它的第一款16bit 处理器8086,之后几款处理器名字也都以86结尾,包括80186,80286,80386,80486,这些处理器的架构被统一称为x86架构。其......
  • linux cpufreq framework(5)_ARM big Little driver
    1.前言也许大家会觉得奇怪:为什么Linuxkernel把对ARMbig·Lttile的支持放到了cpufreq的框架中?众所周知,ARM的big·Little架构,也称作HMP(具体可参考“LinuxCPUcore的电源管理(2)_cputopology”中相关的介绍),通过在一个chip中封装两种不同类型的ARMcore的方式,达到性能和功耗的......
  • win10环境Windows环境下MYSQL5.7免安装版下载、配置(win10-x64位32g内存)
    win101-Windows环境下MYSQL5.7免安装版下载、配置(win10-x64位32g内存)  一、MYSQL免安装版下载二、解压安装三、设置登录、修改密码一、MYSQL免安装版下载1、下载链接:https://downloads.mysql.com/archives/community/.2、MySQL5.x版本以上需要收费,所以我选择了一个最新的(m......
  • 从CPU的视角看 多线程代码为什么那么难写!
      当我们提到多线程、并发的时候,我们就会回想起各种诡异的bug,比如各种线程安全问题甚至是应用崩溃,而且这些诡异的bug还很难复现。我们不禁发出了灵魂拷问“为什么代码测试环境运行好好的,一上线就不行了?”。为了解决线程安全的问题,我们的先辈们在编程语言中引入了各种各样新名......
  • 获得android手机的CPU核心数
    //CPU个数privateintgetNumCores(){//PrivateClasstodisplayonlyCPUdevicesinthedirectorylistingclassCpuFilterimplementsFileFilter{@Overridepublicbooleanaccept(Filepathname){//Checkiffilenameis&......
  • HPL:多进程CPU性能测试
    使用HPL进行CPU性能测试CPU型号为:AMDRyzen75800H,本次实验使用两台Linux虚拟机测试,每个虚拟机分配一个CPU。理论浮点峰值=CPU主频×CPU核数×CPU每周期执行浮点运算的次数本机CPU的基准频率为3.2GHZ,加速频率为4.4GHZghz。CPU有8核16线程(一个核虚拟成2个CPU),CPU单个周期浮点计算......
  • Pytorch2 如何通过算子融合和 CPU/GPU 代码生成加速深度学习
    动动发财的小手,点个赞吧!PyTorch中用于图形捕获、中间表示、运算符融合以及优化的C++和GPU代码生成的深度学习编译器技术入门计算机编程是神奇的。我们用人类可读的语言编写代码,就像变魔术一样,它通过硅晶体管转化为电流,使它们像开关一样工作,并允许它们实现复杂的逻辑——这......
  • 聊聊开关和CPU之间故事
    目录开关电报和继电器门电路材料学的发展继电器与哈佛Mark1号真空管与巨人一号晶体管与IBM608计算机2大特性:计算能力和记忆能力作者:小牛呼噜噜|https://xiaoniuhululu.github.io大家好,我是呼噜噜,在先前的一篇文章计算机中数值和字符串怎么用二进制表示?中,我们知道了计算机为......