Sie haben es in Microsofts C++ - Standardbibliothek gefunden, aber es kommt tatsächlich von C. C 11, um genau zu sein, was bedeutet, dass es technisch kein Teil von C++ ist.
C 11-Standard, Anhang K eingeführt alle _s
Funktionen und die entsprechenden typedefs, einschließlich rsize_t
. Es gibt auch ein "Maximalwert" -Makro RSIZE_MAX
, das groß genug für typische Anwendungen ist, aber kleiner als der tatsächliche Maximalwert des Typs. Die sicheren Funktionen machen nichts und melden einen Fehler, wenn ein Wert vom Typ rsize_t
RSIZE_MAX
überschreitet.
Die Idee besteht darin, Abstürze bei Pufferüberläufen und ähnlichen Fehlern zu vermeiden, die durch ungültige Größen verursacht werden, die sich normalerweise aus der Verwendung eines negativen Werts für die Größe ergeben. In der vorzeichenbehafteten Zweierkomplementdarstellung (die am häufigsten vorkommende) entspricht eine negative Zahl einer großen Zahl sehr, wenn sie als unsigniert behandelt wird. RSIZE_MAX
sollte solche falsche Verwendung fangen.
den "rationalen" Teil von C11 (N1570) Zitiert, K.3.2:
3 Extrem große Objektgrößen sind häufig ein Zeichen dafür, dass die Größe eines Objekts falsch berechnet wurde.Zum Beispiel werden negative Zahlen als sehr große positive Zahlen angezeigt, wenn in einen vorzeichenlosen Typ wie size_t
konvertiert wird. Einige Implementierungen unterstützen auch keine Objekte, die so groß sind wie der Maximalwert, der vom Typ size_t
dargestellt werden kann.
4 Aus diesen Gründen ist es manchmal vorteilhaft, den Bereich der Objektgrößen zu beschränken, um Programmierfehler zu erkennen. Für Implementierungen, die Maschinen mit großen Adressräumen adressieren, wird empfohlen, dass RSIZE_MAX
als das kleinere der Größe des größten unterstützten Objekts oder (SIZE_MAX >> 1)
definiert wird, auch wenn dieses Limit kleiner ist als die Größe von einige legitime, aber sehr große, Objekte. Implementierungen, die Maschinen mit kleinen Adressräumen adressieren, möchten vielleicht RSIZE_MAX
als SIZE_MAX
definieren, was bedeutet, dass es keine Objektgröße gibt, die als Laufzeitbeschränkungsverletzung betrachtet wird.
Es ist erwähnenswert, dass Anhang K sehr wenige Implementierungen hat und gibt es einen Vorschlag (N1967) deprecate und/oder aus dem Standard entfernen.
Ist das nicht ein visuelles studio-spezifisches 'typedef'? Es scheint nicht in meinen Header-Dateien zu erscheinen, noch scheint es in meinem Standardentwurf zu erscheinen. – skyking
Vielleicht finden Sie (oder finden Sie nicht) nützliche Informationen in [Verwenden Sie die TR-24731 "Safe" -Funktionen?] (Https://stackoverflow.com/questions/372980/do-you-use-the-tr- 24731-safe-functions) Zumindest gibt es einige Probleme, die Sie beachten sollten, wenn Sie Bedenken hinsichtlich der Portabilität haben. –