こんにちは私は、システムコールvfork()がLinuxカーネルソースのfork.cで呼び出された回数をカウントするカウンタを作成しようとしています。私はtotal_forksの実装方法に従っています。 Total_forksはsched.hで定義されています。しかし、ゼロに初期化された場所を見つけることはできません。forks.cのtotal_forksはどこで初期化されていますか?
2
A
答えて
4
私はあなたが、Linuxカーネルについて話している推測している、と変数はsched.h
でとhere定義を宣言しました。グローバル変数(ファイルスコープで定義され、static
ではなく)です。これらは暗黙的に0に初期化されます。
#include <stdio.h>
int var;
int main(int argc, char* argv[]) {
printf("var is %d\n", var);
return 0;
}
0
は、私はあなたが見ているソースをよく知らないんだけど、心にいくつかの考えスプリングは:あなた自身のコードでこれを試してみてくださいinit
が開始されたときに
それは1に初期化することができます。
BSSセグメント内にあるため、0に初期化される場合があります。ランタイムシステムは、変数のメモリの一部を初期化することを知っており、初期ブート時に 'メイン'カーネルプロセスに渡す前に、変数のすべてをクリアします。