VS 2010: 64Bit exe bauen?



  • Mahlzeit,

    Ich habe in VS 2010 ein C++ Projekt erstellt, das nur folgendes macht:

    int main() {
    	cout << sizeof(int);
    	int i;
    	cin >> i;
    
    	return 0;
    }
    

    Oben in der Toolbar hat man ja die 2 Konfigurationen "Debug" und "Release" und daneben eine Platform Combobox, in der es nur die Option "Win32" gibt. Sehe ich das richtig, dass wenn ich da jetzt die Kombination "Debug" und "Win32" hab, VS eine Debug 32Bit exe baut? Auch wenn ich ein 64Bit BS und CPU habe?

    Ich will eine 64Bit exe erzeugen, also klicke ich auf die Platform Combobox => Configuration Manager => Active Solution platform => New => Type or select the new platform: x64.
    So, er steht jetzt also auf "Debug" und "x64". Wenn ich jetzt mein Programm neu baue und starte, gibt er aber noch immer "4" aus. Sollte er jetzt nicht eine 64Bit Anw. gebaut haben und sizeof(int) 8 liefern? 😕



  • Bitte64bit schrieb:

    Sollte er jetzt nicht eine 64Bit Anw. gebaut haben und sizeof(int) 8 liefern? 😕

    Nein. VC++ (und Windows) verwendet das LLP64-Speichermodell. Schau hier in der Tabelle nach:
    http://de.wikipedia.org/wiki/64-Bit-Architektur



  • Ah, ok. Also waren meine Schritte generell richtig?



  • Ja.



  • K, Danke.

    Ah, noch was: Gibts eigentlich vordefinierte Makros, mit denen ich auslesen kann für welche Platform ich grade kompiliere? Also z.B. ein _X64_ Makro, wenn ich als Platform x64 auswähle

    In dieser Liste:
    http://msdn.microsoft.com/de-de/library/b0084kay.aspx
    gibts zwar ein:

    _M_X64 Defined for x64 processors.

    aber so wie ich das sehe ist das nur vom Prozessor abhänigig - sprich wenn ich eine 64bit CPU hab, ist das definiert; auch wenn ich eine Win32 Anwendung baue?

    Gibts da so ein Platform Makro?



  • Bitte64bit schrieb:

    aber so wie ich das sehe ist das nur vom Prozessor abhänigig - sprich wenn ich eine 64bit CPU hab, ist das definiert; auch wenn ich eine Win32 Anwendung baue?

    Nö, das verstehe ich schon so, dass der Prozessor gemeint ist, für den man übersetzt, nicht den man hat.



  • Hm, auf der Seite:
    http://msdn.microsoft.com/en-us/library/9yb4317s(VS.80).aspx
    steht am Ende, dass bei einer 64 Bit Platform WIN64 statt WIN32 definiert wird.

    Values of WIN32 are replaced by WIN64 for /D (Preprocessor Definitions).

    Wenn ich aber jetzt auf x64 umstelle und in den Project Properties mir die Preprocessor Macros anschaue (oder die Compiler Commands), steht da nach wie vor WIN32:

    WIN32;NDEBUG;_CONSOLE

    Wieso steht da nach wie vor WIN32, obwohl meine Platform x64 ist?


Log in to reply