MATLAB R2018a(64 位)的默认堆栈大小是多少?
堆栈大小似乎比 64 位 C# 程序大。
我为什么这么问
我问这个问题是因为我正在调用英特尔 MKL拉帕克_dtrtri https://software.intel.com/en-us/mkl-developer-reference-c-trtri这是高度递归的。
我在 .NET 应用程序中使用该函数,从 C# 调用它时遇到堆栈溢出错误,请参阅BackgroundWorker DoWork 线程的堆栈大小是多少?有办法改变吗? https://stackoverflow.com/questions/56457637/what-is-the-stack-size-of-a-backgroundworker-dowork-thread-is-there-way-to-chan
另一方面,如果我从 MATLAB 调用 .NET 应用程序,则不会收到堆栈溢出错误。这就是我想知道 MATLAB 的堆栈大小是多少的原因。
使用GetCurrentThreadStackLimits
函数来自kernel32.dll
我可以获得 MATLAB 的堆栈大小。
我在 .NET 程序集中创建了以下辅助方法,名为IntelMKL.dll
:
static class _kernel
{
[DllImport("kernel32.dll")]
internal static extern void GetCurrentThreadStackLimits(out uint lowLimit, out uint highLimit);
}
and
public static class MKL
{
public static uint GetStackSize()
{
uint low, high;
_kernel.GetCurrentThreadStackLimits(out low, out high);
return high - low;
}
}
我可以致电GetStackSize
使用以下代码从 MATLAB 中获取:
NET.addAssembly('IntelMKL.dll')
IntelMKL.MKL.GetStackSize() % this return 67108864 Bytes which is 64 Mega Bytes
MATLAB 的堆栈大小为 64 MB。
堆栈大小似乎比 64 位 C# 程序大。
默认 C# 堆栈大小为 1 MB(32 位)和 4 MB(64 位),请参阅BackgroundWorker DoWork 线程的堆栈大小是多少?有办法改变吗? https://stackoverflow.com/questions/56457637/what-is-the-stack-size-of-a-backgroundworker-dowork-thread-is-there-way-to-chan
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)