引用类型和值类型 问题

asia217 2017-07-17 09:22:18
引用类型运行与堆上,值类型运行与栈上。
我们熟知的程序都是以类开始(Wpf,Console),那么该类都是运行在堆上,调用类的方法时,方法里面的局部变量(值类型)此时在堆里还是栈里呢

如果上面的问题答案是堆里,那么栈的使用场景会是什么样的呢?
...全文
257 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2017-07-17
  • 打赏
  • 举报
回复
调用类的方法时,方法里面的局部变量(值类型)此时在堆里还是栈里呢? 在栈里。
threenewbee 2017-07-17
  • 打赏
  • 举报
回复
作为局部变量的值类型在栈上,其余都在堆上
asia217 2017-07-17
  • 打赏
  • 举报
回复
我想 :类的实例在堆上, 类的字段值在堆里,类的方法的声明在堆里。 声明类的变量在栈里,当调用方法时,会将方法内的局部变量放在栈里。 高手们,可以这样吗?
exception92 2017-07-17
  • 打赏
  • 举报
回复
值类型由栈分配内存,编译的时候都已经分配。
闭包客 2017-07-17
  • 打赏
  • 举报
回复
就是在栈里面……
秋的红果实 2017-07-17
  • 打赏
  • 举报
回复
我的理解是:程序在CRL执行时,都有一个专属的堆栈空间,程序载入后,程序的所有东西(变量、方法、语句)都被装入堆上,执行某个具体动作时,由JIT从载入到内存的堆里,找到相应逻辑(程序语句),生成CPU可以执行的指令,并压入栈顶,供CPU的指令系统取走执行 方法里面值类型变量,当然是在栈上分配
  • 打赏
  • 举报
回复
乱! 方法定义在进程的代码部分,跟数据部分是分开的。当加载DLL、EXE时的时候,加载到内存。并不纠结什么对象的“里边”。对象实例被某些方法执行,或者执行某些对象的方法,这是编译器做的事情,它知道如何索引代码段里边的代码部分,跟什么“堆、栈”无关。当调用一个方法时,自然是要把参数压入栈,此时简单值自然就是计算机一个基本数据足以表示了(例如直接把一个浮点数装入寄存器),而复杂的对象自然就只能用基本数据来表示堆索引。这些都是编译技术基础知识,你应该学习一下课程。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧