2016-03-20 16 views
1

Ich bin neu in Rust und ich versuche zu verstehen, wenn eine Box anstelle einer regulären Referenz verwendet werden sollte.Wann wird Box anstelle von Referenz verwendet?

Alle Beispiele, die ich finden kann, zeigen, wie man einen Box verwendet, aber keiner von ihnen erklärt, in welcher Situation Sie sie über normale & Referenzen verwenden sollten.

Antwort

4

Box A bezeichnet, dass ein Typ Besitz ist und dass es auf dem Heap zugeordnet ist. Eine Referenz (&) bedeutet, dass Sie den Wert von etwas anderem leihen.

Sie können sogar eine Referenz von A Box (explizite Typen werden hier nicht benötigt wird, nur aus Gründen der Klarheit gezeigt):

let boxed: Box<i32> = Box::new(42); 
let reference: &i32 = &boxed; 

Der primäre Unterschied kocht-Eigentum nach unten. Wenn Sie einen Wert besitzen, können Sie mehr Dinge tun, wie zum Beispiel das Zerstören oder die Kontrolle seiner Veränderlichkeit.

Heap vs Stapel ist auch wichtig, aber weniger sofort so. Stacks haben tendenziell eine feste Größe, die relativ klein ist (auf meinem Rechner sind es 8MiB), so dass das Deklarieren großer Variablen auf dem Stack dazu führen kann, dass der Speicher erschöpft wird. Der Heap neigt dazu, größer zu sein, konzeptionell 2^32 oder 2^48 Bytes adressierend.

The Rust Programming Language hat eine section on ownership sowie einen Abschnitt über the stack and the heap; Ich würde Sie ermutigen beide zu lesen.

6

(Zusätzlich zu Shepmaster die große Antwort: eine andere Art und Weise des Eigentums denken)

Sie müssen immer daran denken: woher kommt der Wert Live?

Zum Beispiel können Daten auf dem Stapel, an einem bestimmten Ort der ausführbaren Datei oder in einem Box leben. Auf der anderen Seite, eine Referenz ist kein Ort zu leben in - es zeigt nur auf einige Daten, die lebtwoanders. Also:

  • , wenn Sie wissen, dass die Daten, die Sie mit einem Haus leben in muss arbeiten wollen: Sie können in der Regel nur eine Referenz (Adresse) verwenden, um nur den Zugriff darauf zu erhalten (besuchen sie ✈).
  • , wenn Ihre Daten nicht über einen Platz zum Leben in, steckt es in einer Kiste ihm, ein Haus zu geben ♥

Die Kapitel ownership und borrowing im Rust Buch eine gute Möglichkeit, zu lernen, über diese Konzepte.

+2

Beste Verwendung von Unicode Ich habe gesehen, in einer Weile! –

Verwandte Themen