# Byte eines arrays



## sternchen (30. Nov 2009)

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


----------



## @x.l (30. Nov 2009)

Dann schau dir mal die Größe von primitiven Datentypen an. Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 2.3 Datentypen, Typisierung, Variablen und Zuweisungen


----------



## javimka (30. Nov 2009)

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


----------



## sternchen (30. Nov 2009)

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?


----------



## KrokoDiehl (30. Nov 2009)

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 
	
	
	
	





```
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


----------



## KrokoDiehl (30. Nov 2009)

sternchen hat gesagt.:


> 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?



Nein. Arrays haben immer die gleiche Größe (gemeint ist die Anzahl der Plätze).


----------



## sternchen (30. Nov 2009)

ahh oki, supi

vielen dank für die hilfe


----------



## chillerStudent (6. Dez 2011)

Wenn ein Array die länge 10 hat, rechnet man dann 10*4=40 Bytes ?


----------



## Dow Jones (6. Dez 2011)

chillerStudent hat gesagt.:


> 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).


----------



## chillerStudent (6. Dez 2011)

Wenn ein int Array auf null gesetzt ist, mit wieviel byte ist er dann gespeichert? Mit einem byte, weil null boolean ist?


----------



## TKausL (6. Dez 2011)

chillerStudent hat gesagt.:


> Wenn ein int Array auf null gesetzt ist, mit wieviel byte ist er dann gespeichert? Mit einem byte, weil null boolean ist?



Das geht zu tief ins System, das muss man eigentlich auch garnicht wissen. Wozu auch? Man wird kein Int-Array Definieren, wenn man es dann nicht Initialisiert...


----------



## chillerStudent (6. Dez 2011)

TKausL hat gesagt.:


> Das geht zu tief ins System, das muss man eigentlich auch garnicht wissen. Wozu auch? Man wird kein Int-Array Definieren, wenn man es dann nicht Initialisiert...



ich weiß, ich weiß...

Ich muss das leider in den Hausübungen angeben. Ich frage nicht aus Neugierde.


----------



## Dow Jones (6. Dez 2011)

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.


----------



## chillerStudent (6. Dez 2011)

Dow Jones hat gesagt.:


> 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?


----------



## Dow Jones (6. Dez 2011)

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...


----------



## chillerStudent (6. Dez 2011)

Dow Jones hat gesagt.:


> 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:



Dow Jones hat gesagt.:


> Und ich vermute auch das der Lehrer hören möchte, das ein auf Null gesetztes Array gar keinen Speicherplatz beansprucht...


----------



## irgendjemand (6. Dez 2011)

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 ?*


----------



## Dow Jones (6. Dez 2011)

chillerStudent hat gesagt.:


> 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 ;-) )



chillerStudent hat gesagt.:


> 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:

```
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?


----------

