メモリアドレス0x0が予約されているのはなぜですか?何かを理解するのが苦労していますメモリアドレス0x0が予約されているのはなぜですか?
答えて
ほとんどの慣例で実装固有のものです。
C言語標準(C99またはC11) - 及び例えばLisp-のようないくつかの他のプログラミング言語(すなわちundefined behavior、segmentation 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を使用することができます。
理論(および過去)、アドレスが...数よりも複雑であるかもしれない(例えばi286上x86 memory segmentation、およびアドレッシングiAPX432、Rekursivアーキテクチャ、1980年代に等...)
Cプログラミング、マイクロプロセッサアーキテクチャ& instruction sets、operating systemの原則、virtual memory、MMUでいくつかの本とWebページを読む。
ページングされたメモリシステムでは、最初の(0番目の)ページをデフォルトではマップしないことが一般的でした。これは通常、リンカーによって強制される規則です。プログラム・ローダーが実行可能ファイルを読み取ると、最初の論理ページをマップする命令が決して得られません。
この理由は、ヌルポインタエラーを検出するためです。
int *whatever = 0 ;
. . . .
*whatever = 10 ;
アクセス違反が発生します。
これは通常、プロセスが実行開始後に最初の(0番目の)ページをマッピングすることが可能であり、リンカオプションを指定してプログラムセクションがそこに基づいていることを可能にすることができます。
- 1. 他のメモリアドレスが変更されている間に、一部のメモリアドレスが一定の理由で報告されるのはなぜですか?
- 2. メモリアドレスがMIPSで4ずつインクリメントされるのはなぜですか?
- 3. なぜ@記号がJavaScriptで予約されていて、その目的は何ですか?
- 4. Pythonで予約を予約する(レストランではない)
- 5. なぜ検証要約がレンダリングされないのですか?
- 6. control-b:それは予約されていますか?
- 7. 「予期しないkeyword_end」が表示されるのはなぜですか?
- 8. 予期しないトークンが表示されるのはなぜですか?
- 9. なぜ私のテーブルサイズはavg_row_lenから予想されるよりも約10倍大きいのですか?
- 10. `writev`の呼び出しでメモリアドレスが表示されないのはなぜですか?
- 11. 契約違反が予想されていますか?number? - スキーム
- 12. アレイのメモリアドレスが常に増加しないのはなぜですか?
- 13. このラベルの制約が表示されないのはなぜですか?
- 14. npmに予期しないモジュールがたくさんインストールされているのはなぜですか?
- 15. Clang Cコンパイラ 'class'キーワードは予約されていますか?
- 16. 部屋が存在しないか、すでに予約されている場合は例外をスローする
- 17. 予測がプロットされないのはなぜですか?ここ
- 18. ボックスモデルに未知のスペースが予約されています
- 19. タイムシリーズの予測でジャンプが表示されるのはなぜですか?
- 20. Jerseyサーブレットのマッピングが機能しないのはなぜですか(予約を追加しない)?
- 21. antlrで予約されていないキーワードを定義する方法
- 22. redisチャンネルへの予約が維持されない
- 23. MonadPlusの制約で `guard`が定義されていないのはなぜですか?
- 24. なぜstd :: unordered_mapに予約メソッドがありますか?
- 25. "handle"という用語はPHPで予約されていますか?
- 26. なぜこの約束(async/await)が待たれていないのですか
- 27. ポイントがプロットされていないのはなぜですか?
- 28. DateTimeがアンボックスされていないのはなぜですか?
- 29. ラジオボタンがチェックされていないのはなぜですか?
- 30. Golang:構造体参照のメモリアドレスが変わるのはなぜですか?