atajh Geschrieben 22. Dezember 2004 Teilen Geschrieben 22. Dezember 2004 Hallo, bitte schlagt mich nicht wenn das hier eine unqualifizierte Frage sein sollte... Das folgende kleine Programm soll mir zeigen, wieviel Platz ein char-Array auf dem Stack tatsächlich belegt... #include <iostream> using namespace std; main() { int b; char a[97]; cout << ((unsigned) &-((unsigned) &a) << endl; } [/code] Auf einem Athlon 1400 mit gcc-2.95.4 kompiliert wird beispielsweise "100" ausgegeben, wie ich es erwartet hatte, da 97 chars ebend 97Bytes belegen und dann noch auf ganze dwords "aufgerundet wird". Mit gcc-3.3.4 dagegen wird "124" ausgegeben, es werden also offenbar 24Bytes verschwendet.... ist das so geplant; wenn ja, warum? Grüße, atajh Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SystemError Geschrieben 9. Januar 2005 Teilen Geschrieben 9. Januar 2005 Hmmm... Also ich mache das eigentlich immer mit dem "sizeof" Operator? #include <iostream> using namespace std; main() { int b; char a[97]; cout << ((unsigned) &-((unsigned) &a) << endl; cout << sizeof(a) << endl; } [/code] Das ganze liefert auf einem AthlonXP mit FreeBSD als OS GCC 3.4.2 folgendes Ergebnis: [code] bash-2.05b$ ./testa.bin 124 97 bash-2.05b$ Der sizeof Operator leifert mir die zu erwartenden 97 Byte; dein Ausdruck zur Adressberechnung nicht. Kann es sein das dieser Ausdruck fehlerbehaftet ist? Verstehe ich es richtig dass Du die Differenz der Adresse des Integer Wertes und der Adresse des Arrays von einander abziehst? Macht das keinen Sinn oder verstehe ich das was falsch? Bye SystemError, blutiger C++ Anfänger Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SystemError Geschrieben 9. Januar 2005 Teilen Geschrieben 9. Januar 2005 Soooo, noch mal ein kleines Update von mir. Schau Dir mal diesen Code hier an: #include <iostream> using namespace std; main() { int b; char a[97]; cout << ((unsigned) &a[97])-((unsigned) &a[0]) << endl; cout << sizeof(a) << endl; } Der liefert sowohl auf einem FreeBSD System mit GCC 3.4.2 als auch auf einer AIX Kiste mit GCC 2.95.2 folgendes Ergebnis: bash-2.05$ ./a.out cpp 97 97 So denke ich mir das: Ich nehme die Adresse von a[97] (letztes Array Elementes + 1 Element) und ziehe dann davon die Adresse von a[0] (erstes Array Element) ab. Dazwischen liegen dann 97 Byte, so wie es sein sollte? Sorry wenn ich falsch leige... ...bin wie gesagt blutiger Anfänger in C++. Bye SystemError Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.