Autor Beitrag
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 08.03.05 11:36 
Hallo zusammen
Ich hab gestern eine Unit geschrieben, welche einen mathematischen Ausdruck parst und in Maschinencode übersetzt. Ursprünglich hatte ich ein VirtualAlloc mit PAGE_EXECUTE_READWRITE für die Allozierung des Speichers drin. Es scheint aber, als ob es mit GetMem auch geht. Ich habe in der Source getmem.inc nachgeschaut, da seh ich aber nur ein PAGE_READWRITE. :gruebel:
Die Frage ist nun, wie kann ich am einfachsten Speicher allozieren, den ich auch garantiert ausführen kann? Wieso geht's überhaupt mit GetMem?
Vielen Dank!
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 08.03.05 11:59 
Hmm.. ALso getmem ist meines Erachtens nur dazu da, um eben für Vartiablen (sprich: für lese- und schreibzugriff) Speicher zu reservieren... Was spricht denn gegen die Lösung mit VirtualAlloc?


MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
delfiphan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 08.03.05 12:00 
Geht nur immer in 4kb Blöcken. Die Funktionen sind vielleicht 200 Bytes gross.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 08.03.05 12:12 
Ja, im Speiucher ist eine Page eben 4 KB groß. Da wird dein GetMem auch nichts anderes liefern, weil das einfach vom OS so vorgeschrieben ist und das OS mit anderen Größen nicht umgehen kann...

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
delfiphan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 08.03.05 12:18 
user profile iconMrSaint hat folgendes geschrieben:
Ja, im Speiucher ist eine Page eben 4 KB groß. Da wird dein GetMem auch nichts anderes liefern, weil das einfach vom OS so vorgeschrieben ist und das OS mit anderen Größen nicht umgehen kann...

Nein, hinter GetMem steckt ein Memory Manager, der alles schön aufteilt (unter 4kb). Das ist ja der Sinn eines Memory Managers.
Ich hätte gehofft, dass es sowas wie ein GetMem gibt, welches spezielle Execute-Blöcke erstellen kann, die er dann auch unterteilt.. Gibt's wohl nicht.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 08.03.05 12:25 
Okay, das mit dem MemoryManager mag sein. Dann kannst dri vllt das mal anschauen: msdn.microsoft.com/l...e/virtualprotect.asp

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
delfiphan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 08.03.05 13:10 
Danke, aber mit VirtualProtect kann man nur Zugriffsrechte von Blöcken ändern, die man mit VirtualAlloc erstellt hat. (Natürlich kann ich damit auch Zugriffsrechte von Blöcken ändern, die mit GetMem erstellt wurden, jedoch möchte ich Daten von Code getrennt haben! Wenn ich einfach mal die Zugriffsrechte eines Block ändere, die mit GetMem angelegt wurden, sind da Daten UND halt eben mein Code drin)
Es gibt kein API Befehl für meine Bedürfnisse; ich hatte bloss gehofft, dass Delphi da was parat hat. Ein anderer Memory Manager oder so...
Naja, ich lasse es sein. Geht halt jedesmal 4kb drauf, sollte ja nicht weiter tragisch sein.
Gruss
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.03.05 14:21 
Es gibt alternative Suche in: Delphi-Forum, Delphi-Library MEMORYMANAGER.