2017-06-17 2 views
-1

Ich löse eine Testfrage und bin mir nicht sicher mit der richtigen Antwort. Die Frage ist: Wenn ich den Code unter 32-Bit-Betriebssystem ausführen, wie viel Speicherplatz wird auf Stapel im Moment zugeordnet, wenn wir von Funktion malloc() in Funktion hook() zurückkehren. Es wird auch angenommen, dass der gesamte erforderliche Speicher zugewiesen wurde.Wie viel Platz ist auf dem Stapel zugeteilt

Here is code

…char A[1000000]… 

int hook() {char C[2000000]; … 
    ptr_char2 = (char) malloc (5000000)); /*Hi guys, how much memory do I have now?*/…… 
} 

int main() { 
    char B[3000000];…… 
    ptr_char = (char*) malloc (4000000)); 
    hook();… 
} 

Ich weiß, dass auf dem Stack statisch zugewiesenen Variablen gespeichert. Dynamisch zugeordnet sind auf dem Heap. Ich habe versucht, char A (0.9MB) + char B (1.9) + char C (2.8) zu zählen und es dauert etwa 5,6MB. Die richtige Antwort ist jedoch eine der folgenden 1MB, 5MB oder 9MB. Könnte mir jemand helfen, wo ich Fehler mache? Vielen Dank im Voraus.

+0

Sie sollen den Code * verbatim * in die Frage einfügen, bitte bearbeiten Sie entsprechend, danke! –

+0

Hallo und willkommen bei Stackoverflow. Diese Website enthält Fragen und Antworten, damit sie für andere Menschen in Zukunft nützlich sein können. Zu diesem Zweck müssen Sie den eigentlichen Code und keinen Link zu ihm oder ein Bild davon veröffentlichen. – spectras

+0

OK, ich habe nur einen Screenshot der Frage eingefügt, aber ich habe versucht, sie zu bearbeiten. Es tut uns leid. – Kandri6

Antwort

0

A ist statisch und ist nicht auf dem Stapel.

In seiner letzten Tiefe wird main aufgerufen und hook heißt. Zu diesem Zeitpunkt sind sowohl B als auch C auf dem Stapel.

Das macht insgesamt 5000000 Bytes = 4.76837158203125 MB.

+0

Ja, so wird die richtige Antwort 5MB sein. Und wo ist Char A gespeichert? Vielen Dank. – Kandri6

+0

'A' ist im BSS-Segment gespeichert, was weder das Stack-Segment noch das Heap-Segment ist. Suchen Sie nach "BSS" für weitere Informationen. –

+0

Gibt es irgendwelche Zeigervariablen im Stapel? 'ptr_char' und' ptr_char2' sind nicht in den Funktionen definiert, aber es wird natürlich auch nicht angezeigt, dass sie statisch sind ... Nicht, dass es für das Endergebnis mit diesen Optionen wichtig ist. – ilkkachu