【问题标题】:How to change the value of a variable while debugging Visual C++ progrmme-VS 2010如何在调试 Visual C++ 程序-VS 2010 时更改变量的值
【发布时间】:2012-12-05 07:31:40
【问题描述】:

我的程序包含一个包含 600000 个元素的大数组(每个元素都是一个结构)。当我在调试程序时,它在

处给出了OutOfMemoryException
FlightLeg *legRecord= new  FlightLeg[600000];(FlightLeg is a structure)

该程序需要花费大量时间,因为它必须进行多次数据处理和初始数据加载(超过两天!)。

所以我想在调试时进行更改。我认为将 600000 更改为更小的值会有所帮助。如果我错了,请给我任何建议。

你能告诉我有没有办法在调试时改变600000?因为我不想丢失之前消耗两天的数据加载。

【问题讨论】:

  • 为什么要使用指向固定大小数组的指针?我对您的应用程序的性质并不完全清楚,但如果可能的话,我建议您使用 vector,并在需要新的 FlightLeg 时 push_back 一个新的 FlightLeg。
  • 查找“编辑并继续”。
  • @librik。谢谢你的评论。我正在使用管理代码。所以“编辑并继续”对我不起作用。
  • @johnathon.thank you.yes 现在我必须停止我的程序并尝试使用向量。

标签: visual-studio-2008 visual-c++ out-of-memory visual-studio-debugging


【解决方案1】:

这取决于几件事:

  • sizeof 结构 FlightLeg。例如,如果一个FlightLeg 需要 100 个字节,那么它就需要 60,000,000 字节的内存,这是巨大的,尤其是在要分配连续内存时。
  • 在多次分配如此巨大的大小后,您的进程可用的内存将受到限制。您可能需要编译和构建相同的 64 位版本,以便您可以利用更多(更多)内存。
  • 分配这种大小,不推荐这种类型。你应该使用一些集合类(如vectorlist)来做同样的事情。即使数组大小是恒定的,我也不推荐编译时分配(即堆栈分配)。

【讨论】:

  • 谢谢阿杰。我必须将这么多数据存储在内存中以减少磁盘访问时间。实际上一个 FlightLeg 是 200 字节。我有 8GB 内存。我会尝试矢量。
  • 1. RAM 大小并不意味着您可以访问所有内容。如果是 32 位进程,则不能访问超过 2GB。您需要有一个 64 位进程才能拥有/访问更多内存。 2. 即使您将(如此巨大的东西)存储在内存中,操作系统也可能会将一些内存分页到磁盘中。而且,即使您从磁盘读取,操作系统也可能会为您缓存和/或优化文件读取。使用矢量!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2010-09-16
  • 2014-04-01
相关资源
最近更新 更多