0

我正在开发一个 GXT 应用程序,该应用程序在尝试在树控件中显示一个非常大的数据集时在 IE 10 64 位(因为 32 位 IE 用尽可寻址内存)中出现堆栈空间错误而崩溃。这不是堆栈溢出;它达到了内存限制而不是递归限制。我研究了多种选择(包括从根本上重新设计应用程序),但内存使用大部分超出了我们的控制范围,我无法获得更好的解决方案背后的太多牵引力。

因此,虽然不可避免地建议我们做一些根本错误的事情得到赞赏、承认和欢迎,但我主要想问一下是否有一个 IE 注册表项可以调整以增加我似乎正在运行的人为堆栈空间限制进入。请注意,我的系统有足够的 RAM;我遇到了软件限制。

4

1 回答 1

0

新线程的默认堆栈大小嵌入在 .exe 文件中(请参阅下面转储输出中的“堆栈大小”字段)。创建线程时,应用程序可以指定自定义堆栈大小,但大多数应用程序只使用编译时指定的默认值。

>link.exe /dump /headers "c:\Program Files\Internet Explorer\iexplore.exe" 

Microsoft (R) COFF/PE Dumper Version 11.00.50727.1 Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file c:\Program Files\Internet Explorer\iexplore.exe

PE signature found

File Type: EXECUTABLE IMAGE

...    

OPTIONAL HEADER VALUES
             20B magic # (PE32+)
           10.00 linker version
            4A00 size of code
           B1C00 size of initialized data
               0 size of uninitialized data
            2CE8 entry point (0000000000402CE8) wWinMainCRTStartup
            1000 base of code
          400000 image base (0000000000400000 to 00000000004BAFFF)
            1000 section alignment
             200 file alignment
            6.01 operating system version
            6.01 image version
            6.00 subsystem version
               0 Win32 version
           BB000 size of image
             400 size of headers
           C16C7 checksum
               2 subsystem (Windows GUI)
            8140 DLL characteristics
                   Dynamic base
                   NX compatible
                   Terminal Server Aware
          100000 size of stack reserve
            E000 size of stack commit


可以编辑这些,但您必须复制整个目录以避开一些安全限制。使用 Visual Studio 工具集,这将使堆栈大小加倍:

  1. 复制:“C:\Program Files\Internet Explorer”到“C:\Program Files\Internet Explorer Big”
  2. 运行:editbin.exe /STACK:0x200000,0xE000 "c:\Program Files\Internet Explorer Big\iexplore.exe"

作为参考,PE 文件格式规范可以在这里下载。

于 2013-08-19T22:15:34.977 回答