gpt4 book ai didi

c# - 使用任何 CPU 集编译 C# 应用程序可以处理大 (>2GB) 地址

转载 作者:太空狗 更新时间:2023-10-29 21:49:16 25 4
gpt4 key购买 nike

我在性能测试期间遇到了这个问题。

使用 x86 平台标志编译 C# 控制台应用程序时,未设置 Large Address Aware 标志:

dumpbin/headers app.exe 的输出:

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 是大地址感知的:

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) 地址”标志已设置。

我找不到关于这个主题的任何文档。所有其他堆栈溢出问题都建议您必须手动执行此操作:

How to enable IMAGE_FILE_LARGE_ADDRESS_AWARE in C# source code?

Can I set LARGEADDRESSAWARE from within Visual Studio?

Use the 3Gb of memory in 32 bits applications

问题是:这个记录在哪里?

最佳答案

The purpose of AnyCPU is to be able to run managed code on both x86 and x64 platforms while at the same time take advantage of the larger address space of x64 platforms.做到这一点的唯一方法是在针对 AnyCPU 时将二进制文件标记为大地址感知。此外,如果不是这种情况,将首选 32 位设置为默认值是不合适的。

Where is this documented?

这没有明确记录,这是暗示的。

All other stack overflow questions suggest you must do this manually

不管所有这些问题和答案如何,只有在以 x86 为目标时才需要这样做。

关于c# - 使用任何 CPU 集编译 C# 应用程序可以处理大 (>2GB) 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34905703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com