首页 > 解决方案 > 这些方法参数是存储在栈上还是堆上?

问题描述

我读过无数文章,其中类和对象实例变量存储在堆上,而本地和方法变量通常存储在堆栈上。

但是作为对象的方法参数呢?

private void myMethod (int a, myObject b)
{
   bool c = (a > 0 && b.myCounter < 0 ? true : false);
   //do some more work
}

//Are both a & b stored in the stack? Or is "a" in the stack and "b" on the heap?

编辑/更新: “b”当前是一个类,而不是一个结构。它有大约 20 个属性,其中一些属性由其中包含的属性的布尔运算确定(类似于代码示例中“c”的完成方式),因此如果这更有意义,可以考虑将其重构为结构。

看看这样的微观优化,这是一个实时和资源性能关键的金融应用程序。

标签: c#c#-4.0

解决方案


“b”是类的实例还是结构的实例?

  • 如果是一个类的实例,在栈中有原始数据的引用,原始数据存放在堆中。
  • 如果它是结构的实例,则存储在堆栈中。

推荐阅读