Gerade Potenzen als Größe

Gast #3067050
Lesenswert?

Moin

Wie der Titel schon sagt geht es darum:
In einem Projektbeispiel wird man darauf hingewiesen als Größenangabe 
für ein Array, welches im "idata"-Bereich des Speichers liegt, nur 2er 
Potenzen zu verwenden, also:
2,4,8,16,32 u.s.w.

Wieso kann ich nicht einfach irgendeine Größe wie 1 oder 3 nehmen?
Gast #3067096
Lesenswert?

Ebert schrieb:
> Prozessor: Infineon-C515C
> Array: vom Typ "int" --> Aber Größenangabe muss einer Zweierpotenz sein,
> wieso? (Es kann 2, 4, 8, u.s.w. sein)
> Wieso geht nicht einfach 3 oder 7?

Der Grund der Einschränkung liegt bestimmt nicht beim Prozessor. Wer 
oder was soll mich daran hindern, ein Array mit 7 Elementen zu 
deklarieren/definieren?
Gast #3067109
Lesenswert?

>In einem Projektbeispiel wird man darauf hingewiesen als Größenangabe
>für ein Array, welches im "idata"-Bereich des Speichers liegt, nur 2er
>Potenzen zu verwenden
> Wieso kann ich nicht einfach irgendeine Größe wie 1 oder 3 nehmen?

Meine Glaskugel sagt : Weil es so programmiert ist und nicht anders, 
sonst würde es auch gehen !
Moderator #3067133
Lesenswert?

Es ist oft sinvoll, dafür zu sorgen, dass die Größe der Elemente von
Arrays Zweierpotenzen sind, weil dadurch bei Array-Zugriffen aufwendige
Multiplikationen entfallen. Das ist aber kein Muss, sondern dient nur
der Optimierung des Programms. Die Array-Größe an sich sollte eigentlich
egal sein.

Ebert schrieb:
> Ja es gehen nur Zweierpotenzen: 2, 4, 8, 16, 32, ...
> Es ist ein C51-Compiler von Keil

Was spricht der Compiler, wenn du frecherweise trotzdem eine Größe von
bspw. 7 nimmst, also
1
int array[7];
?
Gast #3067150
Lesenswert?

> Array: vom Typ "int" --> Aber Größenangabe muss einer Zweierpotenz sein,
> wieso? (Es kann 2, 4, 8, u.s.w. sein)
> Wieso geht nicht einfach 3 oder 7?


Das ist keine zwingende VOrgabe. Wenn du Array mit Grössen von 
Zweierpotenzen hast, dann ist es einfacher, eine Bereichsprüfung zu 
machen.

Bsp. Array[0..7] => 8 Elemente
Wenn du das jetzt indizierst mit x, reicht es, wenn x auf die letzten 
drei Bits begrenzt wird:

x = ( x & 7 );

Das kann nie über die Grenzen hinaus.

Hast du eine willkürliche Zahl dagegen, zB Array[0..17], dann musst du 
mit modulo arbeiten:

x = ( x % 17 );

Das braucht, je nach geheimem Prozessor, enorm Resourcen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren