Byte eines arrays

Status
Nicht offen für weitere Antworten.

sternchen

Mitglied
Hallo,

ich hab mal eine doofe frage =) ich hab eine aufgabe, in der ich ausrechnen soll wieviele bytes insgesamt benötigt werden für mehrere arrays.

nun verstehe ich nicht wie ich das machen soll, weil ich garnicht weiß wieviel ein array an bytes braucht ???:L

mal angenommen ich habe ein array des typs int das die länge 3 hat. benötigt es dann 3 * 8 = 24 Bytes? und wie sieht es aus bei arrays des typs double??

vielen dank für die hilfe?

LG

Sternchen
 
int und float brauchen 32 Bits, also 4 Bytes.
long und double brauchen 64 Bits, also 8 Bytes.
Ein int Array der Länge 3 braucht also 3*4 = 12 Bytes 🙂
 
ahh super vielen dank.... und macht es einen unterschied ob ich jetzt zum beilspiel einen array dem "Fach" 1 eine zahl zugewiesen habe? verändert sich da was an den bytes?
 
Hm, ist aber die Frage (deren Antwort ich selbst nicht kenne), welche Metainformationen hinzukommen. Aber ich habe keine Ahnung ob das in der Aufgabenstellung erfragt ist, sprich wieviel Bytes braucht ein
Code:
int[4]
theoretisch oder tatsächlich... 🙂

Für den tatsächlichen Wert müsste man das Objekt wohl serialiseren und dann die Bytes zählen 😉 Aber wer weiß, am Ende ist das eh plattformspezifisch.

...ok, ich glaube ich habe nun nur zur Verwirrung beigetragen ???:L
 
Wenn ein Array die länge 10 hat, rechnet man dann 10*4=40 Bytes ?

Wenn das Array Elemente von einem Typ aufnehmen soll, der 4 Bytes beansprucht, dann ja. Bei einem Array vom Typ Integer wäre das z.B. der Fall. Bei Shorts würde man 10*2 rechnen, bei Bytes 10*1. Bei Booleans darfst du selber googeln... (prinzipiell beansprucht ein Boolean nur 1 Bit, aber in welcher Form dieses Bit tatsächlich im Speicher abgelegt wird hängt von der Sprache/Compiler/Hardware/weiss der Geier was ab. Wie gesagt, googeln).
 
Ich denke man kann sagen, das ein Array welches "auf NULL gesetzt ist" an sich gar keinen Speicher beansprucht (sofern man überhaupt von einem Array sprechen kann). Wofür auch? Das Ding kann ja nichts speichern; es existiert dann ja nur noch der Name des Arrays, nicht aber das Array selber.

Weniger philosophisch betrachtet muss man freilich sagen, das sowohl der Bezeichner des Arrays als auch der Pointer auf den Speicherbereich (letzterer kann auch der NULL-Pointer sein, als Kennzeichnung dafür das diesem Array kein Speicherbereich zugewiesen wurde) etwas Platz im RAM beanspruchen. Ob man diesen Speicherplatzbedarf noch dem Array zurechnen sollte, darüber kann man streiten wenn man will.
Falls man streiten will: Keine Ahnung wieviele Platz der Bezeichner bei Java braucht, aber beim (Null-)Pointer würde ich mal auf 4 Bytes tippen. Jedenfalls bei 32-Bit Maschinen. Und das Array selber bräuchte halt Objectgröße_in_bytes * Anzahl_Elemente, wie in den verherigen Posts schon beschrieben.
 
Falls man streiten will: Keine Ahnung wieviele Platz der Bezeichner bei Java braucht, aber beim (Null-)Pointer würde ich mal auf 4 Bytes tippen. Jedenfalls bei 32-Bit Maschinen. Und das Array selber bräuchte halt Objectgröße_in_bytes * Anzahl_Elemente, wie in den verherigen Posts schon beschrieben.

Also kann ein Array nie byte<4 sein?
 
Zumindest kann der Pointer auf ein Array, welcher bei der Deklaration des Arrays angelegt wird, nie < 32 Bits (also 4 Bytes) sein. Das ist aber nur meine Vermutung darüber wie das bei Java auf einer 32-Bit-Maschine intern abläuft.
Und ich vermute auch das der Lehrer hören möchte, das ein auf Null gesetztes Array gar keinen Speicherplatz beansprucht...
 
Und ich vermute auch das der Lehrer hören möchte, das ein auf Null gesetztes Array gar keinen Speicherplatz beansprucht...

Ich meine genau das Gegenteil. Der leherer(Uni Prof.) möchte genau hören, dass es Speicherplatz beansprucht.

Widerspricht du dich nicht in der Vermutung, indem du gesagt hast, dass wegen dem Pointer das leere Array den Speicher benötigt und dann:

Und ich vermute auch das der Lehrer hören möchte, das ein auf Null gesetztes Array gar keinen Speicherplatz beansprucht...
 
damit war lediglich gemeint was der lehrer hören will

rein theoretisch verbraucht ein nicht optimierter point auf irgendwas ... auch wenn es NULL ist ... defintiv speicher in java ... da man auf den pointer ja zugreifen kann ...
wie viel das nun ist ... darüber kann man sich wirklich streiten ... aber auch ich würde bei ner 32er VM auf 32bit sowie bei ner 64er VM auf 64bit tippen ... gibt ja in der regel die breite der daten-wörter und damit des speicher-busses an ...

viele sind aber der ansicht das eine auf NULL gesetzte referenz halt auch KEINEN speicher braucht ... was ja in soweit stimmt als das es halt gerade kein objekt gibt auf das diese referenz zeigen könnte ... aber wie gesagt ... eine nicht wegoptimierte variable selbst verbraucht auch immer ein paar bits und cpu last ...

"weil null boolean ist" ...

OUCH

wo hast du das denn her ?

in java ist NULL eindeutig definiert ... nämlich als kennzeichnung dafür das eine referenz auf KEIN objekt zeigt ... das hat rein gar nicht mit boolean zu tun

*wobei bool eigentlich schon sagt : zwei zustände ... und diese mit true und false gefüllt sind ... wo willst du also in einen datentyp der nur maximal 2 zustände annehmen kann noch einen dritten packen ? meinst du nicht auch das sich das etwas wiederspricht ?*
 
Widerspricht du dich nicht in der Vermutung, indem du gesagt hast, dass wegen dem Pointer das leere Array den Speicher benötigt und dann:
Nöö, ich denke nicht das ich mir widerspreche. Wie gesagt, ich unterscheide zwischen dem eigentlichen Array (damit meine ich den zusammenhängenden Speicherbereich von Objektgröße*Anzahl Bytes) und dem organisatorischen Kram (wie den Bezeichner des Arrays und dem Pointer auf den zuvor genannten Speicherbereich). Wenn der Pointer auf null gesetzt wird, dann existiert schlicht und einfach kein Speicherbereich für das Array. Folglich beansprucht es auch kein einziges Byte an Speicher. Der organisatorische Kram existiert natürlich trotzdem (und beansprucht ein paar Bytes im RAM).
Bei dieser Trennung zwischen Array und organisatorischem Kram mag nicht jeder mit mir übereinstimmen, und von daher kann ich durchaus einerseits meine Sichtweise äußern und andererseits vermuten was der Dozent möglicherweise hören möchte. (Übrigens: Man kann so eine Testfrage durchaus auch in mehreren erklärenden Sätzen beantworten, um exakt auszudrücken was man meint ;-) )

Ich meine genau das Gegenteil. Der leherer(Uni Prof.) möchte genau hören, dass es Speicherplatz beansprucht.
Tja, von uns allen kannst du selbst das natürlich am besten beurteilen. Also formuliere die Antwort halt so, wie du es für richtig hälst.


PS:
Java:
        int[] a = new int[10];
        int[] b = null;
        int[][] x = { a, b, {}, null };
Wie man hier sieht enthält das Array x vier Elemente - nennen wir sie mal a, b, c und d - die jeweils selber Arrays sind. c und d haben dabei keinen eigenen Bezeichner, und die Pointer auf c und d sind in dem Array x enthalten (zählen also zum Speicherplatzbedarf von x).
Wieviel Bytes beanspruchen die einzelnen Arrays a, b, c und d nun?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben