gpt4 book ai didi

c++ - 当 DLL 需要比主 exe 应用程序更大的堆栈大小时怎么办?

转载 作者:太空狗 更新时间:2023-10-29 23:03:55 24 4
gpt4 key购买 nike

我有一个用 Visual C++ 2010 编写的模拟引擎,我正在基于它为另一个第 3 方应用程序实现一个 DLL 插件。

但是,当我的库被第 3 方应用程序的线程调用时,我收到堆栈溢出错误。调试后发现 DLL 需要比线程更大的堆栈大小。是否有可能以某种方式扩展当前线程的堆栈大小?

我知道我可能应该检查模拟引擎的代码并将大对象移动到堆中。问题是该引擎由另一家供应商维护,我想尽可能避免修改他们的代码。

我正在考虑在具有更大堆栈大小的 DLL 中创建我自己的线程,并在计算完成时将结果返回给调用线程。这是正确的方法吗?

谢谢,迈克尔

最佳答案

我建议您检查的第一是您实际使用了多少堆栈空间。你在堆栈上分配大对象吗?您的程序是否使用了显着的递归深度?编写一个测试 Hook 应用程序,您可以链接到您的 DLL 并检查您使用了多少堆栈空间。

如果您在堆栈上分配大对象,我强烈建议将它们移至堆。

如果您正在进行重要的递归,您可能希望研究使用由您的 DLL 维护的基于堆的堆栈的循环,而不是依赖应用程序的堆栈。

我提出这些建议只是因为它是独立的插件并且不需要特殊的堆栈配置(或者甚至是一个完全独立的线程只是为了拥有更大的堆栈)的侵入性要小得多。

关于c++ - 当 DLL 需要比主 exe 应用程序更大的堆栈大小时怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24145500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com