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
Sicher das nur Potenzen gehen und nicht auch vielfache von 2 also: 2, 4, 6, 8, 10, usw.?
Ja es gehen nur Zweierpotenzen: 2, 4, 8, 16, 32, ... Es ist ein C51-Compiler von Keil
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
1 | int array[7]; |
?
> 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.
@ lippy: Prozessor ist nicht mehr geheim!
Ebert schrieb:
> Prozessor: Infineon-C515C
Ja genau. Es ist nicht mehr geheim :). Mich hatte nur der Hinweis "muss" verwirrt. Danke für die Antworten
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.