2016-12-18 18 views
-2

C#でオブジェクトを作成するにはどうすればよいですか?私は完全な機能を深く知る必要があります。例:Cでオブジェクトを作成する方法

Myclass obj= new MyClass(); 
+3

C#book –

+0

でCLRの第3章(タイプの基礎)を読んでくださいあなたがここで何をしているのかは不明です。正確なものは何ですか? CLRのメモリ割り当て、ガベージコレクションなど、あるいはコンストラクタ、フィールドイニシャライザなどの順序はどうですか? –

+0

こんにちはJohnさん、ありがとうございます。実際に私はC#を学んでいると私はオブジェクトの作成についてすべてを知る必要があります。すべてのメモリ割り当てから呼ばれるコンストラクタへ。 –

答えて

1

私はこの本を読んで覚えています。これは私が本から覚えたものです。私はこれを覚えていると十分だと思います。もっと知る必要がある場合は、もう一度読むようにします。

GCは常に、ヒープ内のメモリ位置へのポインタを保持しているため、次のオブジェクトをどこに割り当てるかがわかります。これは、次のオブジェクトポインタまたはNOPと呼ばれます。

のは、あなたがこのクラスここ

public class Employee 
{ 
    private int empId 

    public void Work() 
    { 
     // ... 
    } 
} 

は、インスタンスは次のようになりますどのように持っているとしましょう:

-------------------------- -4 bytes 
| Object Header Word | 
|------------------------| +0 bytes <------Object reference is pointed here as well 
| Method Table Pointer | 
|------------------------| +4 bytes for method tabel pointer 
| Storage for empId  | 
|------------------------| +8 bytes (4 for empId) (12 in total (from -4 to +8)) 

ヘッダワードは、このような同期、GC、ハッシュコードなど、多くの目的のために使用されるオブジェクトファイナライズ。

メソッドテーブルポインタは、単にメソッドテーブルまたはMTと呼ばれる内部CLRデータ構造を指すポインタです。 MTはEEClassと呼ばれる別の構造を指しています。 MTとEEClassは、仮想メソッド、インタフェースメソッドを呼び出すために一緒に動作し、ランタイムオブジェクトのタイプを決定します。

あと、64ビットシステムでは、オブジェクトヘッダーワードは8バイト(4ではなく)です。 intの代わりに上記のクラスにboolという1つがあったとしても、ヒープ内のオブジェクトは最も近い4バイトの倍数に揃えられているため、12バイトを占有します。

+0

お返事ありがとうございます。 –

+0

「オブジェクト見出し語」には何が入っていますか?私はどこにでも説明を見つけることができません。 – rolls

関連する問題