Angenommen, ich habe einige Klassen foo < handle
und bar < foo
, baz < foo
und vielleicht qux < foo
. Es gibt ein paar Möglichkeiten, wie ich eine Reihe dieser Objekte speichern können:Was ist besser für die Leistung, Zellen-Arrays von Objekten oder heterogenen Arrays?
Als Zellenfeld:
A = {foo bar baz qux} % A(1) would be a cell, A{1} gives me a foo object
Beginnend mit R2011a, kann ich
foo <
matlab.mixin.Heterogeneous
machen und dann ein Array directy bauen:A = [foo bar baz qux] % A(1) directly gives me a foo object
So wie ich es sehe, aus einer Wartungs Perspektive es besser wäre, eher die zweite Methode zu verwenden, als die ersten, auf diese Weise es Unklarheit über beseitigt, wiezugreifen. Nämlich, wenn wir Elemente des Zellenarrays dereferenzieren müssen (Zelle A(1)
vs foo
Objekt A{1}
, die innerhalb A(1)
lebt).
Aber gibt es irgendeine Art von Speicher oder Leistungseinbußen (oder Nutzen), eine Syntax gegen die andere zu verwenden?
Ich wäre überrascht, wenn Sie den Unterschied in der Leistung sehen könnten. Erstellen Sie beide Objekte und machen Sie ein "whos", um ihre jeweiligen Größen zu sehen. – Floris
@Floris Ich tat das oben und es sieht so aus, als ob die heterogene Array-Implementierung 104 Byte belegt und das Zellen-Array ganze 864 belegt! Das Definieren eines "foo" -Objekts scheint jedoch auch 104 Bytes zu belegen. Ich verstehe also nicht wirklich, was in der heterogenen Implementierung passiert ... –
Der Fluch von Matlab.Niemand weiß wirklich, was hinter dem Vorhang vorgeht und Matlab war nie daran interessiert, den Menschen ihre Geheimnisse zu erzählen. – patrik