IE 10 64位中的堆栈外空间.注册表调整



我正在处理一个GXT应用程序,该应用程序在试图在树控件中显示超大数据集时,在IE 10 64位中发生堆栈外空间错误(因为32位IE的可寻址内存不足)而崩溃。这不是堆栈溢出;它达到了内存限制,而不是递归限制。我研究了多种选择(包括从根本上重新设计应用程序),但内存使用大多超出了我们的控制范围,我也没能找到更好的解决方案。

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

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

>link.exe /dump /headers "c:Program FilesInternet Exploreriexplore.exe" 
Microsoft (R) COFF/PE Dumper Version 11.00.50727.1 Copyright (C) Microsoft Corporation.  All rights reserved.
Dump of file c:Program FilesInternet Exploreriexplore.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:0x2000000,0xE000"c:\Program Files\Internet Explorer Big\iexplore.exe"

PE文件格式规范可在此处下载,以供参考。

最新更新