VC2008中整个程序优化失败

2024-01-25

我有一个在 VS2008 下编译的相当大的 C++ 程序(~11mb exe),并且有兴趣了解整个程序优化是否会显着影响其性能。然而,打开整个程序优化和链接时代码生成会导致链接失败,如下所示;

1>c:\cpp\Win32\Atlas\tin\TINDoc.Cpp : fatal error C1083: Cannot open compiler intermediate file: '.\releaseopt\TINDoc.obj': Not enough space
1>LINK : fatal error LNK1257: code generation failed

查看任务管理器,我可以看到链接器使用越来越多的内存,直到耗尽并崩溃。编译器在 XP 32 位上运行,具有 2GB 内存和 2GB 页面文件。 WPO 是否仅限于较小的应用程序和/或较大的环境,或者是否有任何方法可以让链接器在内存使用方面更加节省。

注:已经关闭了预编译头,这导致编译在链接之前失败,并关闭了调试信息的输出以及任何可能占用额外资源的其他内容。 C1083 的帮助建议缺少头文件或文件句柄不足,而不是缺少空间。

Edit:在VS2010下可以运行,尽管没有预编译头,但性能提升并不那么显着。我将保留此选项,直到我转向具有更强大版本的 VS2010 的更强大的 64 位平台。


VC2008是一头脆弱的野兽。优化器在某些情况下不起作用,看起来您可能会遇到这样的情况。

“不工作”的示例包括

  • 去优化的代码(慢!)
  • 编译器或(更频繁地)链接器崩溃
  • 模糊的编译/链接错误消息
  • 错误的代码执行(这种情况很少见,但并非未知)。

事实上,如果你看看现代优化者使用的一些技巧,你会发现它如此频繁地发挥作用是非常令人惊讶的。其复杂程度相当惊人。

具体解决 Shane 的问题,一些可能会导致您的错误的事情:

  1. 在 DOS 和早期的 Windows 版本中,文件句柄耗尽曾经是一个大问题。在现代 Windows 版本中你几乎看不到它。我什至不确定文件句柄是否仍然存在限制。

  2. 编译器错误可能会导致无限循环,这意味着再多的资源也不够。

  3. 递归包含文件也可能导致类似的情况。您的所有包含文件是否都有“#pragma once" or "#if !defined(FOO_INCLUDED)"?

  4. 您是否有可能在项目中两次包含 TINDoc.obj 文件? 2008 编译器是积极的多线程,并且尝试访问文件的两个线程之间可能存在争用。实际上,即使您没有两次包含该文件,这也可能通过编译器错误发生。

  5. 如果程序真的is如果太大,请考虑将其分解为一个或多个 DLL,然后逐一构建,或者将有争议的源文件拆分为多个文件,以便分多个阶段进行编译。

不要这么认为,因为它说“空间不足”,这一定是原因。某些程序(包括某些编译器)会猜测错误的原因,而不是进行检查。

您可以使用任务管理器或 perfmon 监视内存、句柄等的使用情况,或者(我的偏好)流程浏览器 http://technet.microsoft.com/en-us/sysinternals/bb896653

我已经将其第一部分作为评论发布(见上文),但我按照 Ben (http://stackoverflow.com/users/587803/ben) 的建议将其作为答案 - 并对其进行了一些扩展。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC2008中整个程序优化失败 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • Python:pyswip 输出返回 Atom 和 Functor

    基于一些较旧的post https stackoverflow com questions 63890053 prolog define logical operator in prolog as placeholder for other
  • RabbitMQ Consumer总是直接关闭(C#)

    目前我正在学习如何使用 RabbitMQ 发送作品 但接收不起作用 这是我的代码 var factory new ConnectionFactory HostName hostName using var connection factor
  • 带有接口的instanceof [重复]

    这个问题在这里已经有答案了 如果我尝试将instanceof运算符与错误的类一起使用 我会收到编译错误 动物无法转换为字符串 但使用接口时我不会收到编译时错误 例如 在第 10 行中 我收到编译错误 因为 Animal 不是 String
  • React Native父子通信并返回值

    我是反应本机环境的初学者 我想了解本机反应中的亲子沟通 家长将一个数字传递给孩子 例如 家长将 2 传递给孩子 子级将有一个处理函数 将相同的数字乘以 2 次并将结果返回给父级 作为示例 2 2 并返回 父级将调用子函数并查看输出是否正确并
  • 如何修复我的生成器角度项目以便 grunt 测试有效?

    我正在学习本教程 http www sitepoint com kickstart your angularjs development with yeoman grunt and bower http www sitepoint com
  • Python 和 Pylance VS Code 扩展之间有什么区别?

    我刚刚从老朋友 Sublime 转向 VSCode 我真的很喜欢它的工作方式和它所具有的功能 我是一名 Python 开发新手 我发现了 VSCode 的两个流行的 python 扩展 Python 和 PyLance 我的问题是 Pyth
  • FileSystemWatcher OnChanged 事件需要重新加入 UI 线程

    如何在 FileSystemWatcher 中获取 OnChanged 事件 以便在 OnChanged 事件完成后调用 UI 线程上的方法 或者 只是为了了解知识 如何让 OnChanged 事件完全在 UI 线程上运行 如果你想File
  • Java HttpSession

    java servlet中的HttpSession是在之后才创建的吗 HttpSession s request getSession 在我的代码中我没有这样写 但是当我使用时if request getSession false null
  • Ufw 防火墙阻止 kubernetes(使用 calico)

    我正在尝试在我的服务器 Debian 10 上安装 kubernetes 集群 在我的服务器上 我使用 ufw 作为防火墙 在创建集群之前 我在 ufw 上允许了这些端口 179 tcp 4789 udp 5473 tcp 443 tcp
  • Apache的Mesos和Google的Kubernetes有什么区别

    Apache的Mesos和Google的Kubernetes到底有什么区别 据我了解 两者都是服务器集群管理软件 任何人都可以详细说明主要区别在哪里 什么时候会首选哪个框架 你为什么要使用Kubernetes 位于 Mesosphere 之
  • 设置已发布的 npm 项目的“根”

    我正在发布一个名为的 npm 包foo到 npm 注册表 我使用compile to js 语言编写了该包 为了理智起见 我将编译的输出放入dist 项目目录的文件夹 我的package json将入口点列出为dist entry js n
  • Azure Web Apps 是否在多个实例之间共享磁盘?

    根据大卫 埃博 David Ebbo 在Azure 运行时环境 https github com projectkudu kudu wiki Azure runtime environment file system本文中 当您启动 2 个
  • 为什么“du”的输出通常与“du -b”如此不同

    为什么输出是du通常与du b b是简写 apparent size block size 1 仅使用 apparent size大多数时候给我相同的结果 但是 block size 1似乎可以解决问题 我想知道输出是否正确 哪些数字是我想
  • docker compose 会自动创建端口映射吗?

    我在 Visual Studio 2019 中创建了一个简单的 asp net core 应用程序并添加了 docker 支持 Dockerfile dockerignore 和 docker compose 文件均已创建 在命令提示符中
  • 数据库设计:跟踪每个用户的大量属性。如此之多,我可能会用完列(行存储空间)

    对于我所关心的问题 我希望得到一些意见 我的数据库中有一个 User 表 其中包含您期望的基本内容 例如用户名 密码等 该应用程序要求我跟踪每个用户的大量属性 如此之多 我可能会用完列 行存储空间 我很想添加一个包含 UserID Prop
  • 无需显式定义要抓取的每个字段即可抓取数据

    我想抓取一页数据 使用 Python Scrapy 库 而不必定义页面上的每个单独字段 相反 我想使用动态生成字段id元素的名称作为字段名称 起初我认为最好的方法是建立一个收集所有数据的管道 并在收集完所有数据后将其输出 然后我意识到我需要
  • Erlang:使用 gen_tcp:controlling_process 避免竞争条件

    我正在按照以下顺序实现简单的 tcp 服务器 ok LS gen tcp listen Port active true reuseaddr true mode list ok Socket gen tcp accept LS Pid sp
  • 当区域性可变时,格式化不带年份的本地化日期

    我需要根据当前设置的区域性将日期显示在 M dd 或 dd M 中 在我们的应用程序中 我们明确设置基于配置的区域性 目前 我们使用以下方法格式化日期 string dateStringFormat Thread CurrentThread
  • OpenCV 在图像上运行 kmeans 算法

    我试图在 3 通道彩色图像上运行 kmeans 但每次我尝试运行该函数时 它似乎都会崩溃并出现以下错误 OpenCV Error Assertion failed data dims lt 2 type CV 32F K gt 0 in u
  • VC2008中整个程序优化失败

    我有一个在 VS2008 下编译的相当大的 C 程序 11mb exe 并且有兴趣了解整个程序优化是否会显着影响其性能 然而 打开整个程序优化和链接时代码生成会导致链接失败 如下所示 1 gt c cpp Win32 Atlas tin T