Maximale Größe von size_t

Lesezeit: 2 Minuten

Benutzeravatar von Sunil Bojanapally
Sunil Bojanapally

Ich weiß hinein C Rückgabetyp von sizeof Betreiber ist size_t ein vorzeichenloser ganzzahliger Typ ist, der in definiert ist <stdint.h>. Was bedeutet, dass es maximal groß sein sollte 65535 wie angegeben in C99 Standard 7.18.3:

limit of size_t
  SIZE_MAX             65535

Allerdings drin gcc-4.8.2 Header-Datei stdint.h hat seine Größe viel größer als definiert 65535 im Widerspruch zu dem steht in C99 Standard wie unten gezeigt,

/* Limit of `size_t' type.  */
# if __WORDSIZE == 64
#  define SIZE_MAX              (18446744073709551615UL)
# else
#  define SIZE_MAX              (4294967295U)
# endif

Bitte helfen Sie mir zu verstehen, warum es einen Unterschied oder Grund für meine Fehlinterpretation gibt.

  • So erhalten Sie SIZE_MAX in C89

    – phuklv

    7. Juni 2017 um 1:58 Uhr

Benutzeravatar von Keith Thompson
Keith Thompson

Das sagt die Norm SIZE_MAX muss sein wenigstens 65535.

Es gibt keine Obergrenze an, und die Implementierung von gcc ist vollkommen gültig.

Zitieren der von Ihnen zitierten Referenz (Hervorhebung hinzugefügt):

Sein implementierungsdefinierter Wert soll sein gleich oder größer betragsmäßig (Absolutwert) als der entsprechende unten angegebene Wert mit gleichem Vorzeichen.

  • Jetzt macht es Sinn. SIZE_MAX 65535 ist die Mindestgrenze, mit der ich verwechselt wurde limit of size_t denke es als maximale Grenze. Vielen Dank

    – Sunil Bojanapally

    19. März 2014 um 18:36 Uhr

  • @SunEric: Richtig, 65535 ist das Minimum Maximum.

    – Keith Thompson

    19. März 2014 um 18:46 Uhr

  • Vermuten SIZE_MAX Obergrenze ist UINTMAX_MAX.

    – chux – Wiedereinsetzung von Monica

    19. März 2014 um 18:49 Uhr

  • @chux: SIZE_MAX kann nicht größer sein als UINTMAX_MAXaber es gibt keine festgelegte Obergrenze UINTMAX_MAX. (Es ist nur etwas weniger nützlich zu sagen, dass die Obergrenze von SIZE_MAX ist SIZE_MAX.)

    – Keith Thompson

    19. März 2014 um 18:50 Uhr

  • Verschiedene Grenzwerte in C haben oft eine Beziehung wie z SIZE_MAX <= UINTMAX_MAX. (Wahrscheinlich sind alle unsigned so limitiert – trotzdem wissen das viele nicht – daher mein Kommentar.) Aber einige Limits sind nicht wohlgeordnet wie SIZE_MAX verglichen mit LONG_MAX. Diese 2 kommt in Wechselwirkung mit fseek() (was long zurückgibt), um einen Block zuzuweisen, der einer Datei entspricht, die verwendet wird malloc() was dauert size_t.

    – chux – Wiedereinsetzung von Monica

    19. März 2014 um 18:57 Uhr

1408770cookie-checkMaximale Größe von size_t

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy