Cプログラムが実行されると、スタックの割り当て、リソースの開始、バイナリのロードなど、メインに入る前にOSによって内部で行われる配管作業がたくさんあることは誰もが知っています。
直感的に、これらのジョブはOSの一部だと思います。ただし、実際には、これらのジョブはすべて、LinuxのglibcやWindowsのmsvcrt.dllなどのCRT(Cランタイムライブラリ)と呼ばれる重要なモジュールにあります。そのどこに力があるのか知りたい。
オペレーティングシステムにユーザーモードとカーネルモードが分離されている理由を理解することが重要です。簡単に言えば、システムの安定性が向上します。C-ランタイムライブラリは、オペレーティングシステムサービスを利用する単なるライブラリです。プロセスとともにロードされます。ほとんどのプログラムはユーザーモードプログラムです(ドライバーや他のOSコアサービスとは異なります)。リソースの割り当ては他のオペレーティングシステムサービスによって行われ、これらのライブラリはそれらに安全にアクセスする方法です。
これらのルーチンプロセス作成タスクは、Cプログラム用か、Javaプログラム用かPHPプログラム用かに関係なく実行されます。
さらに、C(またはC)以外の言語で記述されたプログラムがC標準ライブラリを使用する必要はありません。したがって、これらすべてのルーチンタスクをC標準ライブラリに入れることはできません。
たとえば、Linuxシステムの場合、「プログラムローダー」と「ダイナミックリンカー」はGNUCライブラリの一部ではありません。それらは別個の「binutils」パッケージの一部です。
このリンクは少し古いですが、実行中のプロセスへのプログラムの作成の過程に関するかなりの量の情報を提供します。gcc / Linuxを使用しますが、主要なタスクは他のプラットフォームでも同様です。
編集/*ダイナミックリンカーはGLIBCの一部です...雇用されたロシア人に感謝します*/