C# 这些方法参数是存储在堆栈还是堆上?
我读过无数文章,其中类和对象实例变量存储在堆上,而局部变量和方法变量通常存储在堆栈上 但是作为对象的方法参数呢C# 这些方法参数是存储在堆栈还是堆上?,c#,c#-4.0,C#,C# 4.0,我读过无数文章,其中类和对象实例变量存储在堆上,而局部变量和方法变量通常存储在堆栈上 但是作为对象的方法参数呢 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
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?
private void myMethod(int a,myObject b)
{
boolc=(a>0&&b.myCounter<0?真:假);
//多做些工作
}
//a和b是否都存储在堆栈中?或者“a”在堆栈中,“b”在堆中?
编辑/更新:“b”当前是类,而不是结构。它具有大约20个属性,其中一些属性由布尔运算中包含的属性所决定(类似于代码示例中的“C”如何),因此,如果这更有意义的话,可以考虑将其重构为结构。p>
查看这些微观优化,因为这是一个实时和资源性能关键的金融应用程序 b是类的实例还是结构的实例
- 如果它是一个类的实例,那么在堆栈中有一个对原始数据的引用,以及原始数据 数据存储在堆中
- 如果它是一个结构的实例,它将存储在堆栈中
myObject
是一个类,则b
引用的对象存储在堆中。但是,参数a
和b
的值都将存储在堆栈上。int是一种值类型,因此在调用函数之前,它的值将从调用站点复制到堆栈槽中。b
参数是对引用类型实例的引用。在函数调用站点,对该对象的引用值也将在调用之前复制到堆栈插槽中option@AlexeiLevenkov在这种情况下,它要么是类的实例,要么是结构的装箱实例,那么对象总是在堆上吗?结构并不总是存储在堆栈上。我更新了这个问题。看看这是否会改变你的反应?谢谢:-)