c# - 这些方法参数是存储在栈上还是堆上?
问题描述
我读过无数文章,其中类和对象实例变量存储在堆上,而本地和方法变量通常存储在堆栈上。
但是作为对象的方法参数呢?
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”的完成方式),因此如果这更有意义,可以考虑将其重构为结构。
看看这样的微观优化,这是一个实时和资源性能关键的金融应用程序。
解决方案
“b”是类的实例还是结构的实例?
- 如果是一个类的实例,在栈中有原始数据的引用,原始数据存放在堆中。
- 如果它是结构的实例,则存储在堆栈中。
推荐阅读
- vba - 保存外部工作簿后删除名称管理器中的所有输入
- oauth - 如何在多个选项卡之间共享 oauth 令牌
- python - 将列表的元素定义为列表
- typescript - 如何将一个打字稿类对象翻译成另一个,其中只有值改变而键保持不变?
- c++ - 如果我使用递归运行 C++ 程序,则显示 12 以上数字的阶乘错误值
- laravel - 数组验证:多列的唯一验证
- google-analytics - Google 跟踪代码管理器触发异常无法按照文档中的说明工作
- reactjs - 我无法编译启动 React Native 应用程序
- android - 遮蔽整个屏幕(包括状态栏)
- r - 读入多个 .csv 文件