プロセスのメモリレイアウトに関して、プロセス内のすべての関数呼び出しは、新しいスタックフレームをスタックに入れます。
エントリポイント機能以上の機能を実行しているようにmain
見えるため、これが関数に合っているかどうかはわかりません。main
main
新しいプロセスが初期化されると、関数も独自のスタックフレームを取得しますか?
これが実装固有の詳細である場合は、一般的なLinux実装の説明が役に立ちます。
答え1
通常_start
、主なポイントではなくエントリポイントです。
main
によって呼び出される別のサブルーチンです_start
。他のサブルーチンと同様に、スタックにスタックフレームを取得します。
しかし、カーネルは思ったほど多くのことをしません。プロセスには、_start
多くのタスクを実行するメイン(Cコンパイラによって生成されますが、Cプログラムの一部ではない)の前に実行されるいくつかのコードがあります。 setupなどexec
の以前に実行された(Cプログラムが実行される前)コードもあります。stdin
stdout
stderr
カーネルは_start
他のサブルーチンのように実行されないようにいくつかのトリックを使用できますが、これは次のようになります。カーネルは、プロセスが_entry
呼び出されたかのようにプロセスを設定します(ただしそうではありません)。制御が再度渡されると、_start
次exit
が呼び出されます。
(含まれている詳細のいくつかが混乱している可能性があります_entry
)。