Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
PROGRAMPLC_PRGVARÂ Â _p1:POINTERTOBYTE;Â Â _p2:POINTERTOBYTE;Â Â uiCnt:UINT:=4;Â Â eResult:SysMem.RTS_IEC_RESULT;END_VAR_p1:=SysMem.SysMemAllocData(szComponent:='',udiSize:=uiCnt,pResult:=ADR(eResult));_p2:=SysMem.SysMemReallocData(szComponent:='',pMemory:=_p1,udiSize:=uiCnt,pResult:=ADR(eResult));eResult:=SysMem.SysMemFreeData(szComponent:='',pMemory:=_p1);eResult:=SysMem.SysMemFreeData(szComponent:='',pMemory:=_p2);eResult:=SysMem.SysMemIsValidPointer(ptr:=_p1,udiSize:=uiCnt,bWrite:=TRUE);
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
#1. Wir verwenden den realloc() des Betriebssystems. Und der scheint hier eben einen neuen Speicherbereich zurückzugeben
#2. Wir verwenden hier ebenfalls die Speicher API des jeweiligen Betriebssystems, um die Gültigkeit eines Speichers abzufragen.
Der GarbageCollector (CmpMemGC) beinhaltet aktuell bereits die Möglichkeit, allokierte Heap Speicherblöcke zu verwalten.
Das könnte man auf dem betreffenden Betriebssystem verwenden, um SysMemIsValidPointer() darauf abzustützen.
#3. Nein, das gibt meist die Speicher API eines OS nicht her die Größe eines Speichers abzufragen
Grüße
Edwin
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Foldender Code:
Hallo Codesys Support,
könntet ihr Frage 1 als Bug bitte fixeden, denn nach der Doku ist dieses Verhalten zweifelsfrei falsch:
Danke!
Hallo,
auf welchem System/SPS und welcher CODESYS Version
verwendest du das?
(Nur als Info für uns/damit ich des einfacher habe)
Grüße
Edwin
Hallo Herr Schwellinger,
getestet in hab ich das in Codesys 3.5.11.4 mit der SysMem Version 3.5.5.0 und ControlWin ebenfalls 3.5.11.4.
Vielen Dank,
Nina
Hallo Herr Schwellinger,
konnten Sie das nachstellen? Ich kann ihnen auch ein Projektarchiv zukommen lassen...
VG
Nina
Hallo Nina,
wenn es Control Win ist:
#1. Wir verwenden den realloc() des Betriebssystems. Und der scheint hier eben einen neuen Speicherbereich zurückzugeben
#2. Wir verwenden hier ebenfalls die Speicher API des jeweiligen Betriebssystems, um die Gültigkeit eines Speichers abzufragen.
Der GarbageCollector (CmpMemGC) beinhaltet aktuell bereits die Möglichkeit, allokierte Heap Speicherblöcke zu verwalten.
Das könnte man auf dem betreffenden Betriebssystem verwenden, um SysMemIsValidPointer() darauf abzustützen.
#3. Nein, das gibt meist die Speicher API eines OS nicht her die Größe eines Speichers abzufragen
Grüße
Edwin
Hallo Edwin,
Danke für die Rückmeldung.
Gibt es denn einen jira Eintrag um SysMemIsValidPointer auf CmpMemGC abzustützen?