代码之家  ›  专栏  ›  技术社区  ›  Ehsan

非递归上下文中的StackOverflow异常

  •  1
  • Ehsan  · 技术社区  · 16 年前

    我有一个从数据库中提取数据并将其存储在内存中以供以后使用的应用程序。 我已经对这个应用程序进行了大约7000个数据行的测试,但是当我想将它用于10000个或更多的数据行时,我遇到了stackoverflow异常。这太奇怪了,因为我认为我应该从内存中取出,如果我的数据太大,就不应该出现stackoverflow。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Hans Passant    16 年前

    你当然是对的。在C/C++代码中获得堆栈溢出是很容易做到的:

    int _tmain(int argc, _TCHAR* argv[])
    {
        char buffer[4 * 1024 * 1024];
        return 0;
    }
    

    4以确保它也在64位模式下运行。但数组是托管代码中的引用类型。它们被分配到堆上,而不是堆栈上。在C代码中,您必须分配 价值类型 作为一个局部变量来占用堆栈空间。唯一能让你在任何地方使用它的值类型是结构。那是 坚硬的 ,您必须声明一个拥有25万成员的结构。唯一可能的方法是使用某种工具和大型数据库方案自动生成的结构。

    这是不可能的。当然,问题是在您的数据库提供者中。用C或C++编写。做一些不好的事情,比如用alca()吹堆栈。C中的“stackalloc”关键字。我将避免在/stack参数中提到editbin.exe实用程序来增加主线程堆栈的大小,您不必对此胡思乱想。

    与您的数据库提供程序对话。