这个问题说明了一切。尝试在链接器选项中增加堆栈大小会生成错误:
最大堆栈大小必须是65536和16777216之间的整数。
此16MB限制是Delphi编译器的基本限制还是IDE强加的任意限制?还有另一种方法来增加这个价值吗?
注意(预期评论......):
答案 0 :(得分:4)
您可以使用{$MAXSTACKSIZE}
(或{$M minstacksize maxstacksize}
编译器指令将其增加到2147483647。请注意,这与{$M}
的用法不同于{$M+/-}
用于表示为类生成RTTI。
来自XE6 docwiki(它也适用于以前的版本):
$ M指令指定应用程序的堆栈分配参数。 minstacksize必须是介于1024和2147483647之间的整数,它指定应用程序堆栈的最小大小,而maxstacksize必须是minstacksize和2147483647之间的整数,用于指定应用程序堆栈的最大大小。
如果没有足够的可用内存来满足应用程序的最低堆栈要求,Windows将在尝试启动应用程序时报告错误。
答案 1 :(得分:2)
这是Delphi IDE的限制。您可以使用$MINSTACKSIZE
and $MAXSTACKSIZE
指令指定更大的限制。看起来很奇怪IDE设计者决定阻止你从IDE做一些你可以从编译器做的事情。
请注意,更改默认堆栈大小存在风险。这将影响进程中的所有堆栈,即使对于非代码创建的线程也是如此。因此,您可能会发现将更改限制为特定线程更有效。这可以通过将堆栈大小作为参数传递给CreateThread
来实现。
最后,我确信会有一个高性能解决方案,不涉及增加堆栈大小。