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?
Hallo!
Das könnte an dem von Dir geheim gehaltenen Prozessor liegen. Der
adressiert vermutlich Wort-weise. Auch Datentyp ist ein Anhaltspunkt
(int sind bekanntlich meist 16 Bit).
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?
Ebert schrieb:> 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?
Die Lösung zu der Frage liegt in dem Teil der Beschreibung und weiteren
Informationen, die du uns nicht mitteilst.
Siehe Netiquette
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?
>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 !
Also im Beispielprojekt steht, das man eine Zweierpotenz nehmen "muss".
Ich unterstreiche "muss" :). Da ich den Grund dafür nicht kenne frage
ich euch Experten.
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
> 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.