Zum Inhalt springen

G++-3.3 Stack-Allocation bug?


atajh

Empfohlene Beiträge

Hallo, bitte schlagt mich nicht wenn das hier eine unqualifizierte Frage sein sollte... :rolleyes:

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...