我正在 VS2010 Release模式下编译一个非常小的 Win32 命令行应用程序,所有速度优化都已打开(不是内存优化)。
此应用程序旨在服务于单一目的 - 执行单个预定义的复杂数学运算,以找到特定问题的复杂解决方案。该算法功能齐全(已确认),并且在 Debug模式下编译和运行良好。但是,当我在 Release模式下编译时(算法足够大,可以利用优化),Link.exe 似乎无休止地运行,并且代码永远不会完成链接。它的 CPU 使用率为 100%,内存使用率没有变化 (43,232 K)。
我的应用程序只包含两个类,它们都是非常短的代码文件。但是,该算法包含 20 个左右的嵌套循环,每个层内都有内联函数调用。链接器是否试图通过这些循环的所有可能路径运行?如果是这样,为什么 Debug模式链接器没有任何问题?
这是一个小型命令行应用程序(2KB exe 文件),编译时间不会超过几分钟。到目前为止,我已经等了 30 分钟,没有任何变化。我正在考虑让它在一夜之间链接,但如果它真的是试图遍历算法中所有可能的代码路径,它最终可能会在没有 super 计算机的情况下链接数十年。
我需要做什么才能让链接器摆脱这个无休止的循环?这样的代码是否有可能在链接循环之前创建无限链接循环而不会出现编译器错误?
编辑:
Jerry Coffin 指出我应该杀死链接器并再次尝试。我忘了在原帖中提到这一点,但我已经中止了构建,关闭并重新打开了 VS,并尝试多次构建。问题是一致的,但我尚未更改任何链接器选项。
EDIT2:
我也忽略了提到我删除了“Debug”和“Release”文件夹并从头开始重新构建的事实。结果相同。
EDIT3:
我刚刚确认关闭函数内联会导致链接器正常运行。问题是我需要函数内联,因为这是一个对性能非常敏感的操作,内存占用最少。这让我不禁要问,为什么内联会导致这样的问题发生?
EDIT4:
在无休止的链接周期中显示的输出:
Link:
Generating code
EDIT5:
我确认将所有代码放入单个 CPP 文件并不能解决问题。
最佳答案
嵌套循环仅在链接时间代码生成方面影响链接器。有很多选项可以详细确定其工作原理。
首先,我建议完全禁用 LTCG,看看是否还有其他异常问题。
如果在禁用 LTCG 的情况下它在 Release 中链接良好,您可以尝试内联限制、内在函数和优化级别。
关于c++ - 在 Release模式下编译时,大量嵌套循环会导致链接器无休止地运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138831/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'