2016-04-23 17 views
0

これはan object reference of .NET (C#) is just a pointerということを学びました。.NET(C#)オブジェクトリファレンスのタグ付きポインタ

私の質問は以下のとおりです。

  • は、CPUのアーキテクチャおよび/またはオブジェクトのサイズに応じてオブジェクトalignedのアドレスですか?
  • 上記の場合は、tagged pointerとしてオブジェクト参照の最下位ビットのいくつかを効率的に使用できますか?
+4

これはC#(言語)とは関係ありません。そのような使用を選択した場合は、実装へのポインタのみ*です。 – user2864740

+0

コンパイルは、CPUやX86などの設定に応じて速度とメモリを最適化します。アライメントはコンパイル・ディレクティブを挿入することで強制できますが、これらを追加するとオプティマイザの効率が低下する可能性があります。 – jdweng

答えて

4

いいえ、.NET参照はポインタではありません。もちろん、最新のハードウェアで動作するほとんどの実装では、実装の一部としてポインタを使用することがあります。これは、現代のハードウェアの限界と単純に関係しています。私が知っている限り、CPUは現時点では参照をサポートしていません。 x86は間違いありません:)

.NETでこのようなことを考えるべきではありません.Netでの契約の一部として何も得られません。ネイティブの相互運用性を扱うときや、いくつかの小さなものを本当に最適化しなければならないときに、これらのようなことだけを気にします。とにかく、内部的にポインタとして実装されているかどうかにかかわらず、あなたが望むように参照を操作することはできないので、問題は意味がありません。たとえ可能であったとしても、下にあるポインタ(もしあれば)はメモリマネージャの裁量でいつでも変更できます - いつでもヒープ間またはヒープ内で移動できます。

.NETには実際のポインタもあります。あなたが本当にそのような構成に対処する必要があると感じたら、あなたはできます。もちろん、その場合は、フルネイティブ、C++/CLI、または混合モジュールのどちらにするかにかかわらず、C#の代わりにC#を使用する可能性が最も高いでしょう。あなたの他の質問に答えるために

0

は、CPUアーキテクチャ および/またはオブジェクトのサイズに応じて整列オブジェクトのアドレスですか?

オブジェクトのメモリ参照サイズは、CPUアーキテクチャによって異なります。つまり、32ビットシステムであれば、2^32ビットの仮想メモリ空​​間(64ビットアーキテクチャの場合は2^64ビット)をカバーできるため、メモリ参照/アドレスサイズは32ビット/それに応じて4バイト(または)64ビット/ 8バイト。

関連する問題