【问题标题】:Resources needed for class methods [duplicate]类方法所需的资源[重复]
【发布时间】:2012-08-24 03:06:38
【问题描述】:

可能重复:
Does having lots of methods on a class increase the overhead of that class's object?

如果我有课:

public class Example
{
   int someInt1 = 0;
   ..
   int someInt10 = 0;

   string somestring1 = "1111";
   ...
   string somestring10 = "10101010";

   public Method1()
   {
      // do stuff
   }

   public Method2()
   {
      // do stuff
   }

   ...

   public Method10()
   {
     // do stuff
   }
}

我有以下几点:

Example Ex1 = new Example();
Example Ex2 = new Example();
...
Example Ex10 = new Example10();

我很清楚,需要为每个类中的 10 个 int 和 10 个字符串中的每一个分配资源。 Int 在堆栈上,在堆栈上的字符串指针,引用到堆(或者我相信)。

我很好奇类中包含的方法。由于这是编译的,因此只有一组资源(我猜是内存)用于方法,然后这将在类“示例”的所有实例之间共享,还是每个实例都会为方法代码消耗内存?

【问题讨论】:

  • 我想我刚刚得到了答案:stackoverflow.com/questions/3441719/…
  • 只是为了澄清您的一个误解:字符串不是对堆栈的引用。字符串是引用类型,并且在托管堆上分配。堆栈存储类型(值类型)具有固定大小。字符串没有。

标签: c# class memory


【解决方案1】:

每个 Example 实例的成本是 4 个指针 + 2 个 int = 32 位系统上的 24 个字节。字符串是共享的(被多次引用)。

【讨论】:

    【解决方案2】:

    在 Java 中,类中的每个方法只存储一个副本,所有实例化对象都可以使用该副本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 2018-03-11
      • 2020-01-03
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多