【发布时间】:2013-10-21 17:50:05
【问题描述】:
如果我们有这样的代码:
public class Enemy
{
public int hp;
}
然后Enemy 对象在 32 位机器中将占用 4 个字节,在 64 位机器中占用 8 个字节(如果我错了,请纠正我)。
如果我们把它改成这样:
public class Enemy
{
public int hp;
public void Attack() {}
}
Enemy 对象仍将占用与以前相同的内存量,对吧?
这个也一样:
public class Enemy
{
private int hp;
public int Hp { get { return hp; } set { hp = value; } }
}
据我所知,属性是函数,但被视为变量,对吧?
如果我们这样做:
public class Enemy
{
public int Hp { set; get; }
}
这是否意味着Enemy 对象现在根本不占用内存空间?这没有任何意义。
或者甚至这个,就此而言:
public class Enemy
{
public void DoSomething() { }
}
谁能解释一下?
【问题讨论】:
-
至少 - 一个类的每个实例都需要至少一个指向它的指针,否则它将被垃圾回收。还有一些框架开销的附加信息,这些信息会有所不同。每个方法所需的内存量因实现而异。尝试计算此类语言中使用的每个字节可能非常困难,因为您无法直接控制它。为什么你需要知道?还是只是关于自动属性?
-
我只是想了解这个东西是如何工作的。我最初要求了解有关属性的信息。但既然它们就像函数,我也想了解它们。
-
object would take 4 bytes in 32-bit machines, and 8 bytes in 64-bit (correct me if I'm wrong)我不确定。无论您运行的是 32 位还是 64 位,int都将是 4 个字节,这就是它被命名为Int32的原因。我认为您将IntPtr与int混淆了。有错请指正
标签: c# function object memory properties