答えて

2

ほとんどの慣例で実装固有のものです。

C言語標準(C99またはC11) - 及び例えばLisp-のようないくつかの他のプログラミング言語(すなわちundefined behaviorsegmentation faultあろう)逆参照することができないnull pointerの概念を有しており、一部に(他のポインタの異なります有効なメモリ位置)。適度にその考えを"my billion dollar mistake"と呼んでいるTony Hoareと、いくつかの言語(Haskell、Ocaml)には​​3210の種類があります(Ocamlでは'a optionなど)。

ほとんどの実装(すべてではない)、デスクトップ、ラップトップまたはタブレットで、実際にはアドレス0

によってヌルポインタを表し、ユーザ・モードのCプログラムは、いくつかのvirtual address spaceで実行場所のアドレスを含むページ0はマップされません。いくつかの組み込みmicrocontrollers(例えばAVR)で

mmap(2)アドレス0、それだろう悪趣味... MAP_FIXEDでいくつかのLinuxでは、あなたはおそらく可能性)、アドレス0を使用することができます。

理論(および過去)、アドレスが...数よりも複雑であるかもしれない(例えばi286x86 memory segmentation、およびアドレッシングiAPX432Rekursivアーキテクチャ、1980年代に等...)

Cプログラミング、マイクロプロセッサアーキテクチャ& instruction setsoperating systemの原則、virtual memoryMMUでいくつかの本とWebページを読む。

1

ページングされたメモリシステムでは、最初の(0番目の)ページをデフォルトではマップしないことが一般的でした。これは通常、リンカーによって強制される規則です。プログラム・ローダーが実行可能ファイルを読み取ると、最初の論理ページをマップする命令が決して得られません。

この理由は、ヌルポインタエラーを検出するためです。

int *whatever = 0 ; 
. . . . 
*whatever = 10 ; 

アクセス違反が発生します。

これは通常、プロセスが実行開始後に最初の(0番目の)ページをマッピングすることが可能であり、リンカオプションを指定してプログラムセクションがそこに基づいていることを可能にすることができます。

関連する問題