使用x86平台标志编译C#控制台应用程序时,未设置大地址感知标志:
dumpbin / headers app.exe的输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dump of file app.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
569F0089 time date stamp Tue Jan 19 21:35:37 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
102 characteristics
Executable
32 bit word machine
当将标志设置为" Any Cpu"时,生成的exe为大地址感知:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dump of file app.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
569F01D7 time date stamp Tue Jan 19 21:41:11 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
22 characteristics
Executable
Application can handle large (>2GB) addresses
请注意,设置了"应用程序可以处理大(>2GB)地址"标志。
我找不到有关此主题的任何文档。 所有其他堆栈溢出问题建议您必须手动执行此 *** 作:
如何在C#源代码中启用IMAGE_FILE_LARGE_ADDRESS_AWARE?
我可以在Visual Studio中设置LARGEADDRESSAWARE吗?
在32位应用程序中使用3Gb内存
问题是:这在哪里记录?
相关讨论
没有哪里afaik。 这是可修复的,奇怪的是您对解决方案不感兴趣。
@HansPassant,对于我们来说,这不一定是问题,只是非常意外。 而且它的无证事实使它很痛苦。
我可以从主要来源找到与文档最接近的内容是此博客文章blogs.msdn.com/b/calvin_hsia/archive/2010/09/27/10068359.asp x。
仅供参考,Visual Studio 2013并没有这样做,这是2015年的新功能。
AnyCPU的目的是能够在x86和x64平台上运行托管代码,同时利用x64平台的更大地址空间。 唯一的方法是在定位AnyCPU时将二进制文件标记为可识别大型地址。 另外,如果不是这种情况,将"首选32位"作为默认值是不合适的。
Where is this documented?
暗示它没有被明确记录。
All other stack overflow questions suggest you must do this manually
不论所有这些问题和答案,仅在以x86为目标时才需要。
相关讨论
在VS2012中完成了将"首选32位"设置为默认设置。 使其也设置LARGE ADDRESS AWARE标志仅从VS2015开始。
您好,要删除VS2010编译的缓存文件,首先需要打开VS2010,然后点击“工具”菜单,在下拉菜单中选择“选项”,然后在d出的对话框中,点击“编辑器”,点击“文件夹”,然后点击“缓存”,最后点击“清除缓存”按钮,即可清除VS2010编译的缓存文件。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)