Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 15.09.2008, 14:08 Titel: Speicherbelegung Ende-Anfang |
|
|
Warum ist der Wert der am Ende ausgegeben wird nicht gleich dem Anfangswert?
Code: |
type memblock
allocated(1 to 262143) as uinteger
nx_block as memblock ptr
end type
dim smem as double
dim sblock as memblock ptr
dim ablock as memblock ptr
cls
smem = fre
print "Start: " & fre
sleep 5000
while fre >= smem /2
if ablock = 0 then
ablock = new memblock
sblock = ablock
else
ablock->nx_block = new memblock
ablock = ablock->nx_block
end if
wend
print "Filled: " & fre
sleep 5000
ablock = sblock
while ablock <> 0
sblock = ablock->nx_block
delete ablock
ablock = sblock
wend
print "Deleted: " & fre
sleep
|
Bei mir kommt eine Differenz von 1691648 byte raus die ich nicht zuordnen kann. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.09.2008, 15:07 Titel: |
|
|
ich bekomme hier mehr oder weniger zufällig werde, und weiste auch warum? Windows ist kein Singletasking-System, das heißt, du kannst nicht vorhersehen, wieviel RAM wann benötigt wird? Ich habe das Programm provoziert und im Hintergrund noch ein paar Anwendungen gestartet und schon kamen völlig andere Werte raus...  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 15.09.2008, 15:18 Titel: |
|
|
Ach, du meinst das es wegen den im hintergrund laufenden Programme zu diesen veränderungen kommt hmm.... schade das man von FB aus das eigene Programm nicht mit "Realtime"-Priorität starten kann... |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.09.2008, 15:52 Titel: |
|
|
Code: |
#Include "windows.bi"
SetPriorityClass(REALTIME_PRIORITY_CLASS)
|
...oder so ähnlich^^
Man kann aber auch nen eigenen M(emory)M(anager) einsetzten:
Per #UnDef Allocate und DeAllocate löschen, und Funktionen mit denselben Parametern anlegen, die per malloc() und free() sich um den Rest kümmern... |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 15.09.2008, 17:19 Titel: |
|
|
Hm.. Wissenswerter befehl!!! *notier*
Gibt es sowas auch Plattformunabhängig? Bin ja eigentlich lieber ein linux-progger... |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 15.09.2008, 17:21 Titel: |
|
|
Ach habs mal grade ausprobiert:
C:/Programme/FreeBASIC/FreeBasic/FBIDETEMP.bas(3) warning 1(1): Passing scalar as pointer, at parameter 1 of SETPRIORITYCLASS()
C:/Programme/FreeBASIC/FreeBasic/FBIDETEMP.bas(3) error 1: Argument count mismatch in 'SetPriorityClass(REALTIME_PRIORITY_CLASS)'
Da klappt was nich.. kanns sein das da noch mehr parameter mit übergeben werden müssen? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 15.09.2008, 17:57 Titel: |
|
|
Wie viele und welche Parameter du brauchst, steht doch in der windows.bi drin.
(denk ich mal, ich hab sowas nicht ) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.09.2008, 18:13 Titel: |
|
|
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS) sry vergessen^^ |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 17.09.2008, 15:27 Titel: |
|
|
@28398: Okay.. hmm.. nur das setzt die priorität des programms "nur" auf "Hoch" und noch nicht auf Realtime.. gibt es da noch einen anderen parameter? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 17.09.2008, 16:27 Titel: |
|
|
OneCypher hat Folgendes geschrieben: | @28398: Okay.. hmm.. nur das setzt die priorität des programms "nur" auf "Hoch" und noch nicht auf Realtime.. gibt es da noch einen anderen parameter? |
OMG
[zitat]SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)[/zitat]
Das absolute Maximum ist das hier:
Code: | SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL) |
Aber ACHTUNG:
Das kann zur Folge haben, dass bspw. die Daten aus dem Festplattencache nicht mehr geschrieben werden, wenn das Programm sich in diesem Modus befindet, und sich dann aufhängt, ist der PC nicht mehr ohne Kaltstart zu irgendwas zu bewegen. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 17.09.2008, 17:12 Titel: |
|
|
Klingt schon besser THX!! |
|
Nach oben |
|
 |
|