gpt4 book ai didi

.net - 从托管应用程序调用的 native DLL 的堆栈溢出

转载 作者:太空狗 更新时间:2023-10-29 15:34:13 25 4
gpt4 key购买 nike

当我调用 native DLL 时,我的应用程序出现臭名昭著的 0xC00000FD(堆栈溢出)异常。这是通过 Windows CE 5(SH4 处理器)上的托管 C# 应用程序完成的。使用相同的托管应用程序为 Windows XP 编译相同的 DLL,一切正常(无溢出)。 DLL 中的例程正在执行一些非常复杂的递归,这最终是导致溢出的原因,但同样,它在 PC 上运行良好。

似乎我可能只需要在构建 DLL 时调整堆栈大小?我相信在使用 Visual C 编译器时,CE 和 XP 的默认堆栈大小都是 1MB(如果重要的话,我使用的是 Visual Studio 2005)。但是,如果它们都默认为相同的大小,我不确定为什么一个会溢出而另一个不会。我尝试使用/F 编译器标志和/STACK 链接器标志调整堆栈大小,但这似乎没有任何作用。我也不完全清楚我可以在 DLL 中指定堆栈大小,而是可执行文件必须设置它。但如果是这种情况,我该如何调整托管进程在调用 native DLL 时要使用的堆栈大小?

最佳答案

这是指向 a discussion of the memory architecture 的链接Windows CE。

最终,您几乎无法通过编程方式或在编译时调整堆栈大小;操作系统会根据多种因素(包括内存可用性)对其进行更改。使用/F 设置堆栈大小只会设置一个默认值,操作系统可以(而且通常会)忽略该值。无论如何,/F 对 .DLL 不起作用;它仅在编译可执行文件时有效。 .DLL 没有堆栈;属于线程并且(最终)属于进程。

可能是时候回到绘图板删除递归了。

关于.net - 从托管应用程序调用的 native DLL 的堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732054/

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