これはsmapsファイルからです:r-xp
でp
はそれがプライベートとしてロードされていることを示し
b750d000-b76bc000 r-xp 00000000 08:01 918842 /lib/i386-linux-gnu/libc-2.23.so
、私は信じています。なぜこれはそうですか?これは、各.soファイルのコピーが異なるプロセスの異なるメモリアドレスにロードされる場合、共有ライブラリの目的を無効にしませんか?このプライベートロードはどのような利点がありますか?共有ライブラリ(.soファイル)をプライベートとしてロードするのはなぜですか?
2
A
答えて
0
p
は、MAP_PRIVATE
に対応する。プライベートコピー・オン・ライトマッピングを作成します。
MAP_PRIVATE
:ことman mmap
主張。マッピングの更新は、同じファイルをマッピングする他のプロセスからは見えず、基礎となるファイルには反映されません。 [...]このVMAのため
物理メモリのページは、すべてのプロセス限り修正なしで共有される(彼らが同様にカーネルキャッシュと共有されている)で行われます。特定のプロセスで仮想ページが変更されると、このプロセスのページは複製されます(非共有)(コピーオンライト)。
のは、見てみましょう:第一及び第二のVMAsが読み取り専用である
$ cat /proc/self/maps 00400000-0040c000 r-xp 00000000 08:11 529223 /bin/cat 0060b000-0060c000 r--p 0000b000 08:11 529223 /bin/cat 0060c000-0060d000 rw-p 0000c000 08:11 529223 /bin/cat [...]
。それらは(通常は)変更されず、(通常は)すべてのプロセスによって共有されます。
第3のVMA(
rw-p
)は書き込み可能ですが、1つのプロセス内の変更は他のプロセスでも変更できません。このVMAには、異なるプロセスによって共有されない(変更可能な)グローバル変数が含まれています。
関連する問題
- 1. ローカル共有オブジェクト(.soファイル)としてAndroidのexeリンキングシステム共有オブジェクト(.soファイル)
- 2. jnaラッピング共有.soライブラリ - アクセスクラス
- 3. Androidスタジオ - プロジェクトに共有ライブラリ(.so)ファイルとヘッダー(.h)ファイルを追加
- 4. Python2.4でライブラリ(lib * .so)ファイルをロードする
- 5. 共有ライブラリを.soファイルでインストールすることはできません
- 6. エラー共有ライブラリのlibstdC++のロード中so.5を
- 7. .soファイルのない共有ライブラリ用にビルド
- 8. automakeスクリプトで共有ライブラリ(.so)を作成するには?
- 9. ELF用のプロキシ共有ライブラリ(sharedlib、shlib、so)?
- 10. Android Studioで共有* .soライブラリのリリース版を作成する
- 11. Makefileとgccを使用して動的共有ライブラリ(.so、.dylib)を構築する
- 12. Qtを共有ライブラリとしてロードすると正しく閉じますか?
- 13. 複数の.so共有ライブラリをマージする
- 14. AndroidスタジオのCファイル内で共有ライブラリ(.so)メソッドを呼び出す
- 15. Javaを共有ライブラリ(.so)にコンパイルし、JavaのSystem.load()関数でロードできますか?
- 16. なぜリンカは共有ライブラリ名を変更しますか?
- 17. アンドロイドプロジェクトの.so共有ライブラリを取得することができません
- 18. Linux - 実行ファイルに共有ライブラリとしてlibpthreadがあるのはなぜですか?
- 19. アンドロイドスタジオの.so共有ライブラリ内のメソッドを呼び出す
- 20. ロードは、他の共有ライブラリに依存LIBSを共有
- 21. 共有ライブラリを使用してファイルをコンパイルする方法は?
- 22. 共有ライブラリが見つかりません:libhdfs3.so
- 23. Embarcadero C++ BuilderでAndroid用共有ライブラリ(* .so)をビルドすることはできますか?
- 24. .NETコアからlinuxプラットフォーム上の共有ライブラリ(.so)を呼び出すことは可能ですか?
- 25. QtCreatorがローカル共有ライブラリを見つけることができません.so
- 26. 私の.so共有ライブラリのLoadLibraryをC++から呼び出す方法
- 27. 共有ライブラリ(旧スタンダード)をC++ 11共有ライブラリでコンパイルする
- 28. 静的ビルドで共有ライブラリが必要なのはなぜですか?
- 29. なぜCMake EXPORTは共有ライブラリの構築に使用される静的ライブラリを必要としますか?
- 30. Cプログラミング:共有ライブラリ(.so)で定義されたマクロを再定義する