オブジェクトがメモリにどのように格納されているのでしょうか?
私はすでに、オブジェクトに格納されているメモリ内の場所を含むint値である参照(ポインタのような)があることを知っていますが、それはどのように格納されていますか?
とshort e
を持つClassC
があると言います - それぞれのビットがそれぞれ異なるビット数であるが、それぞれのビット数がどのように記憶されているか知っています - 書き込むときにどのビットにアクセスすればよいかは正確に分かりますOBJ.c
またはOBJ.b
?
全体(非静的)オブジェクトをバイトの配列\ビットに変換して戻すことは幾分可能ですか?
明らかに、ClassC.TcpListener tcp
のようなものがある場合、それは参照番号で、int
として保存されています(バイトは同じです)。しかし、それでもint
とポインタはどのように異なっていますか?
オブジェクトはどのようにC#のメモリに格納されますか?
答えて
通常、CライブラリをP/Invokingしていない限り、気にする必要はありません。
OBJ.cまたはOBJ.bを書き込むときに、どのビットをアクセスする必要があるかをC#がどのくらい知っていますか?
オブジェクトのStructLayoutによって異なります。 2つの可能なLayoutKindがあります。
デフォルトはシーケンシャルで、フィールドは宣言された順序と同じ順序で格納されます。alignedが適切です。
- は0-3オフセット:デフォルトでは、5つのフィールドを含む
struct
として記憶されるだろうint a
- は4-5オフセット:
- は8オフセットパディング:
char b
- は6-7オフセット15:
long c
- は16-19オフセット:
float d
- は20-21オフセット:
short e
class
は、vtableポインタ、ガベージコレクタメタデータなどのためにレイアウトが多少異なる場合があります。どういう仕組みかは分かりません。
他のLayoutKindはExplicitで、フィールドオフセットを明示的に指定します。
全体(非静的)オブジェクトをバイトの配列\ビットに変換して戻すことは幾分可能ですか?
はい、Marshalクラスでこれを行えます。 StructureToPtrおよびPtrToStructureを参照してください。
それは参照だと
int
として格納ポインタがint
Sとして格納されていません。 64ビットシステムでは動作しません。代わりにIntPtrが使用されます。
でも、intとポインタの違いは何ですか?
どのレベルですか? C#? CIL?機械語?
"オブジェクトのStructLayout"は幾分矛盾しているようです... –
私はそれをチェックします。ありがとう! –
'Marshal'クラスは、少なくとも必ずしもそうではなく、それらがメモリ内のバイトを見ることを許しません。それは、アンマネージコードに適した形式に変換することです。しばしば、その翻訳は何もしませんが、必ずしもそうではありません。 – svick
実際には、オブジェクト内のメンバーにアクセスする場所がわかりません。オブジェクトのレイアウトを決めるのはJITコンパイラです。
JITコンパイラがメンバーを特定の方法で配置するようにメンバーの属性を追加することができます。これにより、すべてのメンバーにメモリブロックとしてアクセスできるようになりますが、それほど努力する価値はありません。
注:ポインタは、32ビットシステムでは32ビット(int)、64ビットシステムでは64ビット(long)です。
だから、64ビットシステムではメモリ>が一杯になるのです。< –
- 1. C++はどのように関数とオブジェクトをメモリに格納しますか?
- 2. データメンバはオブジェクトにどのように格納されますか?
- 3. アレイはどのようにメモリに格納されていますか?
- 4. lpCmdLineはどのように格納されていますか?
- 5. C++の文字列はどのように格納されていますか?
- 6. C#:任意のオブジェクトをSQL Serverにどのように格納しますか?
- 7. rvaluesはC++にどこに格納されていますか?
- 8. 'this'ポインタはコンピュータのメモリにどこに格納されていますか?
- 9. NSSetsはどのようにメモリに格納され、より効率的になるのですか?
- 10. 共有メモリ(C++)にstlオブジェクトを格納する方法は?
- 11. 変数はどのように再帰的にメモリに格納されますか?
- 12. 浮動小数点数はどのようにメモリに格納されていますか?
- 13. メモリの静的変数はどこに格納されていますか?
- 14. インスタンス化されたオブジェクトはどこにzendフレームワークに格納されますか?
- 15. メソッド名はどのようにランタイムメモリに格納されますか?
- 16. バリューオブジェクトはどのようにデータベースに格納されていますか?
- 17. 永続データベース接続はどのようにPHPに格納されますか?
- 18. コードはどのように実行ファイルに格納されますか?
- 19. 日付はOracleにどのように格納されますか?
- 20. datetime値はどのようにmysqlに格納されますか?
- 21. オブジェクトの属性名はどのようにJavascriptに格納されていますか?
- 22. どのようにresqueにTmailオブジェクトを格納する
- 23. Javascriptのグローバル変数はどのオブジェクトに格納されていますか?
- 24. ASMインタープリタ:ローカル変数はどのように格納されていますか?
- 25. ASP.NET CommandName値とCommandArgument値はどのように格納されますか?
- 26. varcharインデックスはどのように格納されていますか?
- 27. SeriesおよびDataFrameオブジェクトにはどのような余分なデータが格納されていますか?
- 28. 参照は内部的にどのようにC++に格納されていますか?
- 29. Javaオブジェクトを連続したメモリに格納しようとしています
- 30. オブジェクト参照をHTML要素にどのように格納しますか?
「どのように正確に格納されますか?」 - ここであなたが探しているものを正確に明らかにすることはできますか?ヒープ対スタック?永遠?他に何か? – Oded
ここでのほとんどの回答は実装の詳細です。参照は主に不透明であることを意図しています。たとえそれがほとんどの場合ポインタになっても、*必須*ではありません。また、 64ビットのリファレンスは32ビットではなく32ビット(int) –
また、ECMA-335はこれに完全な答えを与えます。もちろん、ちょっと乾燥しています。 –