Skip to content

Allocate argvs at once.

Rika requested to merge runewalsh/source:argv into main

Allocate argv & argvw & their data in one memory region. (I would also prefer this entire thing to be done on demand rather than at the beginning of each application, though... i.e. turn argv etc. into properties or functions or so.)

Compiling this program with -gh: Use heaptrace unit:

begin
end.

and running without parameters gives (numbers might vary depending on the path to the executable):

     used in System startup    
        before     after
x64       320       128
i386      176        96

Running this program:

begin
	writeln(GetFPCHeapStatus.CurrHeapUsed);
end.

with the following parameters:

-i src.mkv
-i 0.png -i 1.png -i 2.png -i 3.png -i 4.png -i 5.png -i 6.png -i 7.png -i 8.png -i 9.png
-i 10.png -i 11.png -i 12.png -i 13.png -i 14.png -i 15.png -i 16.png -i 17.png -i 18.png -i 19.png
-i 20.png -i 21.png -i 22.png -i 23.png -i 24.png -i 25.png -i 26.png -i 27.png -i 28.png -i 29.png
-i 30.png -i 31.png -i 32.png -i 33.png -i 34.png -i 35.png -i 36.png -i 37.png -i 38.png -i 39.png
-i 40.png -i 41.png -i 42.png -i 43.png -i 44.png -i 45.png -i 46.png -i 47.png -i 48.png -i 49.png
-i 50.png -i 51.png -i 52.png -i 53.png -i 54.png -i 55.png -i 56.png -i 57.png -i 58.png -i 59.png
-i 60.png -i 61.png -i 62.png -i 63.png -i 64.png -i 65.png -i 66.png -i 67.png -i 68.png -i 69.png
-i 70.png -i 71.png -i 72.png -i 73.png -i 74.png -i 75.png -i 76.png -i 77.png -i 78.png -i 79.png
-filter_complex_script:v f.txt -c:v libx264 -crf 0 -preset veryfast -c:a copy r.mkv

gives:

      before    after
x64    11296     5536
i386    7008     4128

Finally, surrounding setup_arguments with QueryPerformanceCounters and rebuilding FPC with FPCUpDeluxe shows the speedup from 35 to 6 ms over 300 FPC invocations, which means 100 μs per invocation on average.

Merge request reports