Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
In meinen Sources muss ich immer wieder (wie die meiste ^^) eine Variable oder einen Zeiger Inkrementieren oder Dekrementieren (also z.B. x+1, x-1). Nun hab ich mir dafür Macros geschrieben, Inc(), Dec(), IncP(), DecP() die dasselbe in ASM machen. Und siehe da, das ganze ist sogar schneller als mit PB. Das ganze funktioniert mit Pointern und Integern unter 32 und 64 Bit:
Da PB IMHO dasselbe erzeugt kann ich das auch nicht so recht glauben
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
PB erzeugt aber denselben ASM-Output, jedenfalls war das bisher so.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Macro IncP(_Var)
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
!INC dword[p.p_#_Var]
CompilerElse
!INC qword[p.p_#_Var]
CompilerEndIf
EndMacro
Macro DecP(_Var)
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
!DEC dword[p.p_#_Var]
CompilerElse
!DEC qword[p.p_#_Var]
CompilerEndIf
EndMacro
Macro Inc(_Var)
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
!INC dword[p.v_#_Var]
CompilerElse
!INC qword[p.v_#_Var]
CompilerEndIf
EndMacro
Macro Dec(_Var)
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
!DEC dword[p.v_#_Var]
CompilerElse
!DEC qword[p.v_#_Var]
CompilerEndIf
EndMacro
#Test = 100000000
Procedure Test()
TestString.s = "Das ist ein TestString 0"
*char.Character
For i = 1 To #Test
*char = @TestString
While *char\c<>'0'
*Char + 1
Wend
Next
EndProcedure
Procedure Test2()
TestString.s = "Das ist ein TestString 0"
*char.Character
For i = 1 To #Test
*char = @TestString
While *char\c<>'0'
IncP(char)
Wend
Next
EndProcedure
t = ElapsedMilliseconds()
Test()
t = ElapsedMilliseconds()-t
MessageRequester("Time", Str(t))
t = ElapsedMilliseconds()
Test2()
t = ElapsedMilliseconds()-t
MessageRequester("Time", Str(t))
Und bevor jetzt werd sagt "Den Vorteil kann man doch nirgends spüren":
Ich hab Codes wo man das merkt, Besonders wenn man noch an anderen Stellen optimiert.