Beachten Sie, dass die Startzeit ist IIRC ein weiterer Benchmark, wo FPC Spitzen
ich die Antwort denken muss in erster Linie in der Tatsache zu suchen, daß Free Pascal statisch Programme standardmäßig verknüpft, die Vermeidung libc und andere Hilfsbibliotheken
Dies hat mehrere Konsequenzen:
- Für die einfachen Programme, die gebenchmarkt werden, sind FPC Programme statisch nur das eigene RTL mit (keine statischen Kopie von libc) und keinen dynamischen Verbindungs-Overhead (sowohl in der Zeit als auch im Speicher). Einschließlich der Zuordnung geteilter Glibc-Segmente (ist das so?), Die fälschlicherweise für die Verwendung des Anwendungsspeichers gehalten werden.
- libc möglicherweise nicht benötigte, aber beteiligten Initialisierungen, die FPC nicht für diese einfachen Programme tun. (wie zoneinfo initialisieren)
- da FPC einen völlig unabhängigen Speichermanager verwendet, könnte der Anfangsblock des Heap-Unterzuweisers eine andere Größe haben. Möglicherweise sind FPCs systematisch kleiner.
- Für Gewinde, die Größe des Stapels der neuen Threads könnte verschiedene Unterschiede (Größe und vielleicht die Tatsache, wenn es (teilweise) nur eine Reservierung oder zugesicherten Speicher, oder was auch immer die * nichts-äquivalent das ist) verursacht
Alles in allem denke ich, dieses beobachtete Verhalten ist weniger über FPC, und mehr über den Mangel an Variation zwischen den anderen Benchmarked-Entwicklungssystemen. 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 libc's behandeln. FPC, die anders sind, hebt nur die schlechte Skalierung (lib) gegenüber einfachen Programmen hervor. (*)
Die Schießerei wahrscheinlich könnte in dem Sinne sein vorbelastet, dass entweder geteilt Adresse Raum eher gezählt als tatsächlich privates Bytes verwendet wird, oder weil es nicht genug, um zwischen privatem Bytes von den suballocator und privatem Bytes zugewiesen differenziert tatsächlich von dem Prozess verwendet. Es würde wahrscheinlich einen libc/libmalloc core devel erfordern, 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 es ist etwas grundsätzlich falsch 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 gesagt, alles andere als glibc.
Wie Igoy's Post-Zustände, erhält FPC beim Verknüpfen mit libc die (schlechten) Eigenschaften der anderen Entwicklungssysteme.Dies ist ein weiterer Indikator dafür, dass die Frage sein sollte „warum glibc Sie mit Binärdateien ausführen schlecht in der Schießerei Speicher-Benchmark“ statt „warum FPC gut in der Schießerei Benchmark“
Beachten Sie, dass FPC vermieden libc ursprünglich wegen Kompatibilitätsprobleme und nicht Leistung oder Dateigröße.
Also zu allen, die davon ausgehen, ist dies ein Glücksfall zur Messung der Speichernutzung von FPC, jemals in Betracht gezogen, es ist ein Problem mit glibc Speicher verwenden oder die Messung davon? Oder besser gesagt, dass die hohe glibc-Nummer ist falsch, und nicht die niedrige FPC Zahl ....
.... Ein FPC-Entwickler ....
(*) und bevor Sie können sagen, es ist nur entwickelt, um für "ansehnliche" Anwendungen effizient zu sein, denken Sie daran, dass die Unix Philosophie über die Verkettung kleiner Tools zusammen ist und viele Unix-Prozesse kurzlebig gelebt werden.
Eine der häufigsten Bedeutungen von Voreingenommenheit ist Vorurteil - machen Sie eine Anklage oder stellen Sie eine Frage? Statt "voreingenommen" ist es immer möglich, dass etwas falsch mit der Art und Weise, wie der FPC-Programmspeicher verwendet wird, gemessen wird. Haben Sie [wie diese Messungen durchgeführt werden] (http://shootout.alioth.debian.org/help.php#memory) angeschaut? – igouy
@igoguy Ich denke, dies als etwas anderes zu interpretieren, als zu versuchen, die wild disparaten Speicherzahlen zu verstehen, ist eine Strecke. Es ist eine völlig vernünftige Art, diese Frage zu stellen. –
@Dave Newton - Es ist leicht zu fragen, warum so ein großer Unterschied im Speicherverbrauch gezeigt wird, ohne Voreingenommenheit. Zum Beispiel, lassen Sie jede Erwähnung von Bias einfach weg und fragen Sie - "Ist es wirklich wahr, dass FPC ist so viel besser als g ++?" – igouy