我了解到an object reference of .NET (C#) is just a pointer。
我的问题是:
答案 0 :(得分:4)
不,.NET引用不是指针。当然,在现代硬件上运行的大多数实现中,它可以使用指针作为实现的一部分。这仅仅与现代硬件的限制有关 - 就我所知,目前没有CPU支持引用。 x86绝对没有:)
你根本不应该在.NET中考虑这样的事情 - 作为与.NET合同的一部分,你并没有得到任何这些。在处理本地互操作时,或者当你真的必须优化一些小东西时,你只关心这些事情。无论如何,这个问题毫无意义,因为你不能以你想要的方式操纵引用,无论它们是否作为指针内部实现。即使你可以,底层指针(如果有的话)可以随时由内存管理器自行决定改变 - 它可以随时在堆之间或堆内移动。
.NET也有实际的指针。如果你真的觉得需要处理这样的结构,你可以。当然,在这种情况下,无论您是使用完全本机,C ++ / CLI还是混合模块,您最有可能都希望使用C ++而不是C#。
答案 1 :(得分:0)
回答你的另一个问题:
对象的地址是否根据CPU架构对齐 和/或对象的大小?
对象的内存引用大小取决于CPU体系结构。因此,如果它是32位系统,这意味着它可以覆盖2 ^ 32位的虚拟内存空间(或64位架构的情况下为2 ^ 64位),因此内存引用/地址大小将占用32位/相应的4个字节(或)64位/ 8个字节。