====== Arrays ====== Bei einem Array werden mehrere gleichartige Elemente nacheinander im Speicher abgelegt. Wenn man mit Arrays arbeiten möchte muss man also wissen: - Wo beginnt das Array? - Wie groß sind die einzelnen Elemente? - Wie viele Elemente sind im Array? Erstes Beispiel mit einem Array =============================== :import: day04/vecsum.c [stripped] *--[SHELL(path=day04)]------------------------------------------------* | | | gcc-4.8 -S -fno-asynchronous-unwind-tables vecsum.c | | | *---------------------------------------------------------------------* Folgende Dinge muss man wissen, um den C-Code zu verstehen: :import: day04/vecsum.c [brief] *Aufgabe:* Vollzieht nach, wie diese im Assembler Code umgesetzt wird. :import: day04/vecsum.s Weiteres Beispiel mit einem Array ================================= Wenn man Numerik betreibt, dann möchte man auf Arrays mittels Indices zugreifen: :import: day04/vecsum2.c [stripped] *--[SHELL(path=day04)]------------------------------------------------* | | | gcc-4.8 -S -fno-asynchronous-unwind-tables vecsum2.c | | | *---------------------------------------------------------------------* :import: day04/vecsum2.s Vergleich der Array Zugriffe ============================ :import: day04/vecsum3.c [stripped] *Aufgabe*: - Nachvollziehen was da gemacht wird. - Welche Art von Optimierung wurde hier von Hand durchgeführt? Mit welcher Option kann man versuchen den Compiler dazu zu zwingen dies für euch zu machen? - Was vermutet ihr ist effizienter? Hinweis: - Schaut euch den erzeugten Assembler Code ohne Optimierung an, - dann mit Optimierung Welche Variante kommt ohne Optimierung der optimierten am nächsten? - Was ist schneller, wenn man mit Optimierung `-O3` übersetzt? *--[SHELL(path=day04)]------------------------------------------------* | | | gcc-4.8 -S -fno-asynchronous-unwind-tables vecsum3.c | | | *---------------------------------------------------------------------* :import: day04/vecsum3.s :navigate: __up__ -> doc:index __back__ -> doc:day04/page02