jjzjj

c++ - 从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失

coder 2024-06-22 原文

今天我更新了 MinGW 并重建了我当前的 C++ 项目。自从使用 4.5.0 以来,我已经记录了计时信息,并且在使用 4.6.2 版进行编译时,我看到了巨大的性能损失(大约慢了 4 倍)。

我的构建命令:

g++ -Ilib\svl-1.5\include -Ilib\SDL-1.2.15\include -static-libgcc -static-libstdc++ \
-Ofast -O3 -oecl.exe src\ecl.cpp -lmingw32 -lSDLmain -lSDL -std=c++0x

我在 Window 64 位系统上运行 MinGW。

您知道是什么导致了糟糕的表现吗?

我的 bin 文件夹包含一个名为 mingw32-gcc-4.5.0 的文件。 MinGW 4.6 release notes page说它可以用来编译旧版本。不幸的是,g++ 没有这样的二进制文件。我读到 gcc 也能够编译 C++,但它在我的情况下不起作用,我只是收到大量错误。我只在人们询问如何使用 gcc 编译 C++ 程序的网站上发现使用 g++ 的提示。

有没有办法让我的 C++ 程序使用 mingw32-gcc-4.5.0 编译?如果没有,是否有另一种使用 4.5.0 版进行编译的方法? 我想确保糟糕的性能不是由我的代码更改引起的。

编辑

我通过运行我在 2010 年下载的旧 MinGW 安装程序再次安装了 4.5.0。我将我的代码和构建批处理文件恢复到昨天的状态。还是表现不好。 MinGW 是否在其安装目录之外安装 DLL 或其他相关文件?

最佳答案

Is MinGW installing DLLs or other related files outside of its installation directory?

我不确定这是否适用于您的情况,但我听说某些版本的 MinGW 会在 \MinGW 中查找文件/程序/DLL,即使当前运行的 MinGW 是来自不同的位置。

我不确定此行为可能适用于哪个版本,但我建议您仅在安装了 MinGW 工具链时才使用 \MinGW 安装 MinGW机器。


找到 the source of this advice :

Do not install TDM-GCC to "C:\MinGW"!

Previously, the recommended path to install MinGW at was "C:\MinGW". This is no longer the case -- because other versions of GCC search that path for headers and libraries even if they are not installed there. TDM-GCC has been patched to fix this problem, but most other MinGW/GCC distributions have not. This means that if you have more another installation of MinGW or MinGW-w64, it will always search for headers and libraries in "C:\MinGW", and you'll probably end up using the wrong headers and libraries inadvertently. Therefore, it's now recommended that you use a different path for your installation.

关于c++ - 从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314594/

有关c++ - 从 4.5.0 更新到 4.6.2 后 MinGW g++ 性能损失的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  4. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  5. objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错 - 2

    我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U

  6. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  7. ruby-on-rails - Rails Associations 的更新方法是什么? - 2

    这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user

  8. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  9. Ruby 的数字方法性能 - 2

    我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0

  10. ruby - Ruby 性能中的计时器 - 2

    我正在寻找一个用ruby​​演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent

随机推荐