Was repräsentiert ein size_t?



  • Wann sollte man diesen Datentyp verwenden? In fast allen Systemfunktionen unter POSIX wird fast nur size_t benutzt.

    Worin liegt der unterschied zu einem int oder long?



  • nt



  • size_t repräsentiert den größentyp des jeweiligen systems - du solltest also sichergehen können dass du so den größten typ verwendest den das system hat. ich denke im normalfall wirds eh ein unsinged long sein



  • size_t ist das ergebnis von sizeof. immer unsigned



  • hi!

    size_t ist der grösste typ eines systems? ist das dann nicht speicherverschwendung wenn man immer size_t nimmt? ist size_t nicht zb.: auf linux u windows gleich gross?

    cu



  • progger1 schrieb:

    hi!

    size_t ist der grösste typ eines systems? ist das dann nicht speicherverschwendung wenn man immer size_t nimmt? ist size_t nicht zb.: auf linux u windows gleich gross?

    cu

    najo aber wenn du zb aus einem stl aufruf wie irgendwas.size() einen rückgabewert speicherst dann kannst du sicher gehen, dass keine information verloren geht.

    typische warning unter .net:
    warning C4018: '<' : signed/unsigned mismatch



  • Ich glaube nicht, dass in POSIX überall size_t verwendet wird. Eigentlich nur dort, wo die Größe eines Speicherbereichs benötigt wird. Hast du Gegenbeispiele?



  • progger1 schrieb:

    size_t ist der grösste typ eines systems?

    Nein, ließ nochmal:

    lord_bk schrieb:

    size_t repräsentiert den größentyp des jeweiligen systems

    Größe != größte



  • progger1 schrieb:

    size_t ist der grösste typ eines systems? ist das dann nicht speicherverschwendung wenn man immer size_t nimmt?

    size_t ist auch nicht unbedingt der Typ mit der grössten Datenbreite. IdR wird size_t so definiert, dass man damit die Grösse des verfügbaren Speichers abdeckt.
    Und was den Speicherverbrauch betrifft, das ist relativ zu sehen. Normalerweise erstellt man Variablen ja so lokal wie möglich, somit wird der Stack beansprucht. Nach dem Verlassen einer Funktion wird der verbrauchte Stackspeicher wieder freigegeben und steht somit wieder zur Verfügung.



  • groovemaster schrieb:

    size_t ist auch nicht unbedingt der Typ mit der grössten Datenbreite. IdR wird size_t so definiert, dass man damit die Grösse des verfügbaren Speichers abdeckt.

    ...die größe des auf einmal allokierbaren speichers abdeckt.
    denkt an die speichermodelle aus dos-zeiten. da gab es far-zeiger (,die nicht huge-zeiger waren), man konnte zwar ein MB adressieren, aber zeigerarithmetik war nicht korrekt, wenn man über die grenzen des allokierten bereichs ging und kein bereich konnte größer als 64k sein.
    und wer weiß, welche späße uns noch erwarten werden, wenn man 64-bit-maschinen hat, aber nur 32 bit für zeiger ausgeben mag. die prozessoren werden spaßige sachen recht performant unterstützen.


Anmelden zum Antworten