【问题标题】:Query on 64bit porting of C/C++ codeC/C++代码64位移植查询
【发布时间】:2015-01-25 13:41:00
【问题描述】:

在使用 Visual Studio 2008 64 位编译器为现有 32 位 app.exe(企业应用程序)编译代码后,不使用 /Wp64 编译开关,我们解决了我们遇到的所有 1/2/3 级警告数据类型更改,然后使用 AllocationPreference 注册表项集运行应用程序。

应用程序崩溃并设置了注册表项,如果删除此注册表项,应用程序运行正常。

在这种情况下我该如何处理?您认为使用/Wp64 会增加任何价值吗?

【问题讨论】:

  • @bk1e 我看到了您对此类类似查询的回答。根据上述情况仍然添加/Wp64开关是否有意义?
  • /Wp64 不会捕获所有可移植性问题。您将需要调试您的程序以查看还存在哪些其他问题。
  • @RaymondChen 是的,我们看到很多故障转储。你认为覆盖 1/2/3 级警告应该覆盖大部分(80-90%)的可移植性问题吗?比如结构/联合等中的位对齐。
  • 尝试使用 PVS-Studio 工具 (viva64.com/en/viva64-tool) 进行 64 次诊断。
  • @AndreyCpp 如果不使用此注册表项,如果我监控我的应用程序的“虚拟内存已用空间”,它会显示为10 GB,这意味着应用程序正在处理 64 个 bt 地址位置。我不确定,此注册表项如何在 64 位虚拟地址空间上选择更高范围的地址,应用程序会失败。解决每一次崩溃都需要时间。

标签: c++ windows 32bit-64bit


【解决方案1】:

您可以通过查看崩溃的代码行来解决这个问题。真的很像你会接近任何其他崩溃。 “解决每一次崩溃都需要时间”,你说。好吧,每次崩溃都是一个错误。想想这对你的应用程序有什么影响。有多少 bug 会导致崩溃,有多少数据被静默破坏?

/Wp64 不是一个坏主意,在 64 位构建上。但是让您的代码库井井有条更为重要。

【讨论】:

  • /Wp64 /W3 开关的组合实际上帮助我现在提供了 1 级警告。
猜你喜欢
  • 2011-01-24
  • 2010-12-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多