LMemGetChunkSize Verwirrung

  • Hallo zusammen

    Ich bin aktuell immer noch am aktualisieren des GeoLadder, damit dieser vernünftig "Lokalisierbar" wird.

    Ein Problem habe ich aktuell mit der Funktion LMemGetChunkSize(). Diese verwende ich, um z.B. mit einer Schleife über die Zeichenkette zu arbeiten. Dabei bin ich auf folgende Info in der TechDocs gestossen:

    Quote

    This routine returns the size (in bytes) of a chunk in an LMem heap. Since
    LMem chunks are dword-aligned, the chunk's size may be slightly larger
    than the size specified when it was allocated.

    Ist dem effektiv so? Ich erhalte nicht die Anzahl Bytes oder Chars zurück, sondern eventuell einen grösseren?

    In den Quellen habe ich nur wenig Verwendung dieser Funktion gesehen:

    Auch hier wird ab und zu -1 gerechnet...

  • Ich denke schon dass das ist. Wenn du 14 Bytes anforderst um einen 13 Byte Text plus Null zu schreiben, ist der Chunk 16 Byte groß. GetChunkSize liefert dann 16, es weiß ja nicht, wofür du den Chunk benutzt.

    Oder habe ich dein Problem missverstanden?

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Ok, ich dachte zuerst, dass ich die Grösse vom Inhalt bekomme und nicht die belegte Grösse im Speicher...

    Mein Code sieht im Moment in etwa so aus:

    Code
    @chunk char Test1[] = "Testefeste";
    
    MemLock(OptrToHandle(@Test1));
    
    for (i = 0; i < LMemGetChunkSize(@Test1)) {...}
    
    MemUnlock(OptrToHandle(@Test1));

    Ist es denn sicher, dass der Text vom Chunk auch einen Null-Terminator hat? Oder gibt es da bessere / andere Wege / Funktionen?

  • ?? was willst du machen? Der Code erschließt sich mir nicht, sorry.

    Willst du evtl

    Code
    len_ohne_terminator = strlen(LMemDeref(@Test1));

    ?

    Ob der Chunk eine Null-Terminator hat, bestimmt ausschließlich du. Ein Chunk ist nur ein Stückchen Speicher.
    Mit der Definition in deiner Zeile ganz oben hat er definitiv einen Null-Terminator.

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Ich gehe Zeichen um Zeichen durch. Hört sich jetzt abenteurlich an, ist aber halt alter Code von anno dazumal eines Dummies...

    Das mit strlen(LMemDeref(@Test1)) sieht doch genau nach dem aus, was ich brauche. Manchmal habe ich einen Null-Terminator und manchmal nicht.

    Herzlichen Dank Rainer!