2015-08-31 10 views
10

In praktischer Hinsicht: Welchen Integer-Datentyp sollte ich für Indizes in einem Vektor, Länge von Arrays, etc. verwenden?Was ist das Rust-Äquivalent von `size_t`?

Es gibt viele Diskussionen zu diesem Thema für Pre-1.0 Rust herumschweben im Internet und ich kann keine verbindliche Antwort auf die endgültige Entscheidung finden.

Antwort

11

Das wäre usize und isize (Zeiger-Größe Typen, unsigned und signiert). Die reference sagt, dass die maximale Größe eines Arrays der Maximalwert von isize ist, so dass Unterschiede der Positionen berechnet werden können. Die Funktionen von std::Vec verwenden usize für alle Indizes, obwohl.

+1

Beachten Sie, dass 'isize' auf einem 32-Bit-System auf 32 Bit beschränkt ist, so dass die Größe eines Arrays tatsächlich auf 2 GB beschränkt wird, obwohl 4 GB verfügbar sind. Auf 64 Bits bezweifle ich, dass es ein Problem sein wird. –

+1

@MatthieuM .: auf vorhandenen 64-Bit-Plattformen sind Adressen nur 48 Bit, also 63 Bit ist reichlich. –

+3

@MatthieuM. Warum sind es 2GB und nicht 2G Elemente? –