起動時間は、FPCがピークに達するIIRCのもう1つのベンチマークであることに注意してください
答えは主に、Free Pascalがデフォルトでプログラムを静的にリンクし、libcやその他の補助ライブラリを回避するという事実に基づいて求められる必要があると思います。
これにはいくつかの結果があります。
- ベンチマークされている単純なプログラムの場合、FPCプログラムは独自のRTLのみを使用して静的であり(libcの静的コピーはありません)、動的リンクのオーバーヘッドはありません(時間とメモリの両方)。アプリケーションメモリの使用と間違えられる可能性のある共有glibcセグメントのマッピング(これはそうですか?)を含みます。
- libcは、潜在的に不要であるが、FPCがこれらの単純なプログラムに対して実行しない初期化を伴う可能性があります。(zoneinfoの初期化など)
- FPCは完全に独立したメモリマネージャーを使用するため、ヒープサブアロケーターの最初のブロックのサイズが異なる場合があります。おそらくFPCは体系的に小さいです。
- スレッドの場合、新しいスレッドのスタックのサイズによってさまざまな違いが生じる可能性があります(サイズと、それが(部分的に)予約メモリまたはコミットされたメモリ、または* nixに相当するものである場合の事実)
全体として、この観察された動作はFPCに関するものではなく、他のベンチマーク開発システム間のばらつきの欠如に関するものだと思います。FPCは、他のほとんどすべてがgcc / glibcテクノロジー上に構築されているため(直接gcc派生であるか、VM /インタープリターがgcc上に構築されているため)、すべてがlibcの一般的な扱いを共有しているため、単に際立っています。FPCが異なることは、単純なプログラムに対する(g?)libcの不適切なスケーリングを強調しているにすぎません。(*)
シュートアウトは、共有アドレス空間が実際に使用されるプライベートバイトではなくカウントされるという意味で、またはサブアロケータによって割り当てられたプライベートバイトとプロセスによって実際に使用されるプライベートバイトを十分に区別しないという意味で、おそらく偏っている可能性があります。ただし、これを整理するにはlibc / libmallocコア開発が必要になる可能性があります。また、シュートアウトはオープンソースであるため、より適切な測定を提供できるかどうかという疑問は未解決です。
それか、(g)libcに根本的な問題があります。(私はその専門家ではありません)。より関連性の高い情報を取得するための可能な解決策は、FreeBSD、またはuclibcを使用したLinuxでベンチマークを実行することです。要するに、glibc以外のものです。
Igouyの投稿が述べているように、libcにリンクすると、FPCは他の開発システムの(悪い)特性を取得します。これは、「なぜFPCがシュートアウトベンチマークでうまく機能するのか」ではなく、「バイナリを使用するglibcがシュートアウトメモリベンチマークでパフォーマンスが悪いのはなぜか」という質問であるべきであることを示すもう1つの指標です。
FPCは、パフォーマンスやファイルサイズではなく、クロスディストリビューションの互換性の懸念から、元々libcを回避していたことに注意してください。
それで、これがFPCのメモリ使用量を測定するためのまぐれであると仮定するすべての人にとって、それがglibcメモリ使用量またはその測定の問題であると考えたことはありますか?むしろ、高いglibc番号は間違っており、低いFPC番号ではありません。
....FPC開発者...。
(*)そして、単に「サイズの大きい」アプリケーションに対して効率的に開発されていると言う前に、Unixの哲学は小さなツールを連鎖させることであり、多くのUnixプロセスは短命であることを忘れないでください。