vex*_*exe 3 c# memory properties function object
如果我们有这样的代码:
public class Enemy
{
public int hp;
}
Run Code Online (Sandbox Code Playgroud)
那么一个Enemy对象在 32 位机器中将占用 4 个字节,在 64 位机器中占用 8 个字节(如果我错了,请纠正我)。
如果我们把它改成这样:
public class Enemy
{
public int hp;
public void Attack() {}
}
Run Code Online (Sandbox Code Playgroud)
一个Enemy对象仍然会像以前一样占用相同数量的内存,对吗?
同样的:
public class Enemy
{
private int hp;
public int Hp { get { return hp; } set { hp = value; } }
}
Run Code Online (Sandbox Code Playgroud)
据我所知,属性是函数,但被视为变量,对吗?
所以如果我们这样做:
public class Enemy
{
public int Hp { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着,一个Enemy对象现在根本不占用内存空间?那没有任何意义。
甚至这个,就此而言:
public class Enemy
{
public void DoSomething() { }
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
intSystem.Int32无论是 32 位还是 64 位应用程序,在 C# 中总是会占用 4 个字节的空间。
但是,对象中有额外的开销。Jon Skeet 有一篇博文详细介绍了这里的一些内容,内存和字符串。
如您所见,当以 32 位运行时,对象的基本大小为 12 字节,即使您没有字段。
但是,您是对的,因为具有代码的属性不一定会增加对象的大小。
但是,如果您将其设为自动属性,如下所示:
public int Hp { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后编译器会自动为您创建一个支持字段来保存该属性的值,这将再次占用空间。
| 归档时间: |
|
| 查看次数: |
5029 次 |
| 最近记录: |