Die Sprach-Shootout-Benchmarks bei Ссылка zeigen an, dass FPC-Programme etwa 1/50. des 1/50 verwenden Speicher, die vergleichbare Programme mit g ++ verwenden. Befürworten diese Benchmarks unbeabsichtigt fpc oder stimmt es wirklich, dass FPC viel besser ist als g ++? Ich habe diese Benchmarks immer als eine Sammlung von anständigen Mikro-Benchmarks betrachtet, daher bin ich über diese Ergebnisse überrascht, da ein Faktor von 50 Mal ziemlich bedeutsam ist. IMHO.
Referenzen:
Bearbeiten: Dies wird noch interessanter, seit diese Seite behauptet dieser Pascal verwendete nur 8KB für einige der Programme, die erstaunlich niedrig scheinen
Beachten Sie, dass die Startzeit IIRC ein weiterer Benchmark ist, bei dem FPC-Peaks
sindIch denke, die Antwort muss in erster Linie in der Tatsache gesucht werden, dass Free Pascal statisch Programme standardmäßig verbindet, libc und andere Hilfsbibliotheks vermeidend
Dies hat mehrere Konsequenzen:
Alles in allem denke ich, dass dieses beobachtete Verhalten weniger auf FPC als vielmehr auf mangelnder Variation zwischen den anderen benchmarkten Entwicklungssystemen beruht . FPC hebt sich nur dadurch hervor, dass fast alles andere auf der gcc / glibc-Technologie basiert (entweder weil es sich um ein direktes gcc-Derivat handelt oder weil ihre VM / Interpreter auf gcc aufgebaut sind) und somit alle die libcs behandeln. FPC, die anders sind, hebt nur die schlechte Skalierung (lib) gegenüber einfachen Programmen hervor. (*)
Das Shootout kann wahrscheinlich in dem Sinne voreingenommen sein, dass entweder geteilter Adressraum gezählt wird, anstatt tatsächlich verwendete private Bytes, oder weil er nicht genügend zwischen privaten Bytes unterscheidet, die vom Unterzuordner und vom privaten zugeordnet sind Bytes, die tatsächlich vom Prozess verwendet werden. Es würde wahrscheinlich einen libc / libmalloc core devel benötigen, um dies zu klären, und da die Schießerei Open Source ist, ist die Frage offen, ob Sie eine bessere Messung anbieten können.
Entweder das oder etwas stimmt nicht grundlegend mit (g) libc. (Ich bin kein Experte dafür). Eine mögliche Lösung, um relevantere Informationen zu erhalten, wäre der Benchmark unter FreeBSD oder ein Linux mit uclibc. Kurz etwas anderes als glibc.
Wie Igoyys Post-Statements sagen, erhält FPC beim Verknüpfen mit libc die (schlechten) Eigenschaften der anderen Entwicklungssysteme. Dies ist ein weiterer Hinweis darauf, dass die Frage "Warum glibc mit Binaries schlecht im Shootout Memory-Benchmark funktioniert" und nicht "Warum schneidet FPC im Shootout-Benchmark gut ab"
Beachten Sie, dass FPC libc ursprünglich aufgrund von Kompatibilitätsproblemen bei der Verteilung von Distributionen und nicht der Leistung oder Dateigröße vermied.
Also nehmen wir an, dass dies ein Fehler ist, den Speicherverbrauch von FPC zu messen, jemals in Betracht gezogen, dass es ein Problem mit der Verwendung von Glibc-Speichern oder deren Messung ist? Oder eher, dass die high Glibc-Nummer falsch ist und nicht die niedrige FPC-Nummer ....
.... Ein FPC-Entwickler ....
(*) und bevor Sie sagen können, dass es nur für "beträchtliche" Anwendungen entwickelt wurde, denken Sie daran, dass die Unix Philosophie darin besteht, kleine Werkzeuge miteinander zu verketten und viele Unix-Prozesse kurzlebig zu machen .
Ja, es stimmt wirklich , dass das Unix-Dienstprogramm oben meldet, dass diese Pascal-Programme so viel Speicher verwenden, und diese C ++ - Programme verwenden so viel Speicher.
Zum Beispiel auf x64, während das Free Pascal n-body Programm wird ausgeführt und während des C ++ - N-Body-Programms wird ausgeführt, oben meldet diese Messungen -
%Vor%Der Speicher verwendet top Berichte für die Free Pascal-Programme ist den Speicher, den das Benchmark-Spiel für die Free Pascal-Programme verwendet .
Sehen Sie sich nun x64 Quad-Core-Vergleich
Wir können zwei verschiedene Fälle sehen:
Sowohl die Pascal- als auch die C ++ - Programme verwenden mehrere MBs und die Speicherbelegung ist sehr ähnlich und unterscheidet sich um weniger als ~ 2x. Wenn zusätzlicher Speicher vorhanden ist zugeordnet, um die Aufgabe zu lösen, gibt es nicht viel Unterschied zwischen den Programme.
Die C ++ - Programme verwenden einige hundert KB und das Pascal-Programm verwendet a einige KB. Wenn zusätzlicher Speicher nicht zugeordnet ist, um die Aufgabe zu lösen, wird die Pascal-Programme verwenden ein paar hundert KB weniger.
Die Frage stellt zwei Alternativen vor, aber es gibt gewöhnlich eine dritte Alternative - Habe ich falsch verstanden, was vor sich geht?
Die Tatsache, dass ein C ++ Mandelbrot-Programm 4000x mehr Speicher als ein Pascal Mandelbrot-Programm verwenden konnte, war zu viel für das OP, schien es dem OP unmöglich <- aber es gibt eine einfache Erklärung, Zeit / Raum-Kompromiss .
Das C ++ - Programm ist Multi-Threading , geschrieben, um Multi-Core zu verwenden; aber das Pascal-Programm ist single-threaded , in das geschrieben wird Verwenden Sie Single-Core.
Die Speicherbenutzung eines Pascal Multithread-Mandelbrot-Programms ist dem des C ++ - Multithread-Programms sehr ähnlich.
Tags und Links g++ freepascal fpc