2016-01-20 9 views
5

Ich habe dieses Problem während des Leistungstests festgestellt.Kompilieren von C# mit beliebigen CPU-Sätzen Die Anwendung kann große (> 2 GB) Adressen verarbeiten

Wenn eine C# Konsolenanwendung mit der x86-Plattform Flag kompilieren, ist die große Adresse Aware-Flag nicht gesetzt:

Ausgabe von 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 

Wenn die Flagge Einstellung "Jede Cpu" die resultierende exe ist Large Address Aware:

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 

Beachten Sie, dass die "Application große handhaben kann (> 2GB) Adressen" Flag gesetzt ist.

Ich kann keine Dokumentation zu diesem Thema finden. Alle anderen Stack-Überlauf Fragen vorschlagen, dass Sie dies manuell tun muss:

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

Die Frage ist: Wo ist diese dokumentiert?

+0

Nein wo afaik. Es ist reparierbar, seltsam, dass Sie nicht an Lösungen interessiert sind. –

+0

@HansPassant, es ist nicht unbedingt ein Problem (für uns), nur sehr unerwartet. Und die Tatsache, dass es undokumentiert ist, macht es zu einem Schmerz. –

+0

Die nächste Sache, die ich zu Dokumentation von einer primären Quelle finden kann, ist dieser Blogbeitrag, http://blogs.msdn.com/b/calvin_hsia/archive/2010/09/27/10068359.aspx. – JamieSee

Antwort

2

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. Die einzige Möglichkeit, dies zu tun, ist, die Binärdatei als große Adresse zu markieren, wenn Sie auf AnyCPU abzielen. Wenn dies nicht der Fall ist, wäre es nicht angemessen gewesen, 32-Bit-Voreinstellung als Standard festzulegen.

Wo ist das dokumentiert?

Dies wurde nicht explizit dokumentiert, es ist impliziert.

Alle anderen Stack-Überlauf Fragen vorschlagen, dass Sie diese

Unabhängig von all diesen Fragen und Antworten manuell tun müssen, dies ist nur erforderlich, wenn x86-Targeting.

+2

Making 32-Bit-Voreinstellung wurde in VS2012 getan. Wenn Sie das Flag LARGE ADDRESS AWARE setzen, gilt dies nur für VS2015. –

Verwandte Themen