Verändert eine Matrize während ihrer Lebensdauer die Form, dann trifft die FAQ zu. Es muss nur ein Teil der Matrize neu allokiert werden.
Bleiben die Dimensionen einer Matrize jedoch während der Lebensdauer konstant (der häufigere Fall), dann ist eine flache Allokierung der Matrize (nur 1 Allokierung) platzsparender, schneller und einfacher zu handhaben. Eine Implementierung für eine beliebige Anzahl von Dimensionen gibt Bob Stout's snippet-collection [1].
"flache" Matrix-Allokierung (Prinzip aus der Erinnerung) |
|
Anmerkungen |
BTW mein Nachlesen wundert es mich, dass im snippet auf das Alignment der Datenelemente keine Rücksicht genommen wird.
Um das Beispiel nicht aufzublasen, habe ich keine Rücksicht auf int vs. size_t, bzw. auf eine eventuelle Pointer-Konvertierungsproblematik genommen.
Bilanz |
Ein Vergleich der beiden Varianten bei 2 Dimensionen (Speicherbedarf an angenommem s2p4d8malloc16):
|