首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数返回进入无限循环Visual 2012

问从函数返回进入无限循环Visual 2012
EN

Stack Overflow用户
提问于 2013-03-29 19:45:09
回答 1查看 525关注 0票数 2

我试着测试各种指针的速度,结果遇到了一个非常奇怪的问题。当分配原始指针时,它运行得很好。(存在内存泄漏,但这不是问题所在。)当我使用shared_ptr运行第二个测试时,它运行fill精细,打印日志,然后当它返回时,它进入一个无限循环。看起来,ref计数是垃圾,但我正在按值执行所有操作。

代码语言:javascript
复制
#include <memory>
#include <vector>
#include <functional>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>

#include <Windows.h>

using namespace std;

static const int TOTAL = 1000000;

int* newTest(int i)
{
  return new int(i);
}

shared_ptr<int> sharedTest(int i)
{
  return shared_ptr<int>(new int(i));
}

template <typename T>
pair<int, vector<typename T::result_type>> Fill(T fn)
{
  unsigned long start = GetTickCount();
  vector<typename T::result_type> vec;
  vec.reserve(TOTAL);
  for(int i = 0; i < TOTAL; i++)
  {
    vec.push_back(fn(i));
  }
  unsigned long end = GetTickCount();
  return make_pair(end - start, move(vec));
}

template <typename T>
void Test(T fn, string name)
{
  vector<typename T::result_type> newTest;
  int milliseconds = 0;
  tie(milliseconds, newTest) = Fill(fn);
  cout << "Fill " << name << " Took " << milliseconds << " milliseconds." << endl;
}

int main()
{
  function<int*(int)> fn1 = newTest;
  Test(fn1, "Raw Ptr");

  function<shared_ptr<int>(int)> fn2 = sharedTest;
  Test(fn2, "Shared New");

  return 0;
}

好的。看来我问了一个堆栈溢出问题.当我把总数定在10000的时候就可以了。那么,这仅仅是其他东西的症状,还是我需要增加堆栈大小?

编辑自评论:

塔维森:好的。几分钟后就结束了。你说的不是无限循环是对的。但是,1043毫秒到新的和许多分钟的删除使得使用它们变得很困难。这不是我所期望的结果。

EN

回答 1

Stack Overflow用户

发布于 2013-03-29 20:13:57

如果在调试中运行代码或在调试时发布代码,您将得到一个调试堆,该堆可用于跟踪内存错误。当这种情况发生时,释放的内存中充满了调试模式,因此代码运行得更慢。在没有从Visual进行调试的情况下运行代码,以不到200毫秒结束。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15710392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档