问个基础内存问题

v_table 2010-04-22 04:38:53
笼统的说c#中值类型一般分配在栈中,引用类型分配在托管堆中
这里的值类型应该是不包含类中的值类型字段,但是c#不是所有代码都在类中的吗?
那就是说不会有值类型存在栈中喽?
初学很困扰。。烦请大神帮忙解释下吧。。
...全文
105 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongqun369 2010-04-23
  • 打赏
  • 举报
回复
不懂这些理论...只知道怎么用!
zhouing00 2010-04-23
  • 打赏
  • 举报
回复
引用类型是在堆上分配内存的。
jietuan 2010-04-23
  • 打赏
  • 举报
回复
简单说一下:

1.类方法里面的值字段分配在栈中,当执行方法的时候,才为其分配空间。
2.类里面的值属性字段分配在堆中,否则怎么计算对象在内存中的大小?怎么分配内存空间?
celeron729 2010-04-23
  • 打赏
  • 举报
回复
cauloda: c#类和栈、堆概念不是一个层面的,不能像你那样理解。。
具体的你找本C#书看看就知道了
v_table 2010-04-22
  • 打赏
  • 举报
回复
那堆中obj对象中的值类型也是在堆中?
那要是test方法是某个对象的方法,那它不应该是全部在堆中的吗?包括其中的a和obj应该会都在堆中。。
[Quote=引用 3 楼 wuyazhe 的回复:]

这是说函数调用时候的,函数调用是用栈分配内存的,函数内才涉及到你说的概念。
public void test()
{
int a;//栈
object obj;//堆
}
[/Quote]
v_table 2010-04-22
  • 打赏
  • 举报
回复
那如果这样:
public static Main()
{
Int32 i = 1;
//i在栈中
StringBuilder s = new StringBuilder();
//StringBuilder对象在堆中,引用s在栈中
//如果一个引用类型有值类型的属性字段也是在堆中的。

test2 clst = new test2;//..........
}

public class test2
{
int tt=0;
}
main函数中clst对象应该在堆中,clst在栈中,那么clst中的tt应该是在堆中还是在栈中呢??

[Quote=引用 6 楼 peter200694013 的回复:]

public static Main()
{
Int32 i = 1;
//i在栈中
StringBuilder s = new StringBuilder();
//StringBuilder对象在堆中,引用s在栈中
//如果一个引用类型有值类型的属性字段也是在堆中的。
}
[/Quote]
Peter200694013 2010-04-22
  • 打赏
  • 举报
回复
更正个小错误:
public static Main()
忘记加void

应该是public static void Main()
Peter200694013 2010-04-22
  • 打赏
  • 举报
回复
public static Main()
{
Int32 i = 1;
//i在栈中
StringBuilder s = new StringBuilder();
//StringBuilder对象在堆中,引用s在栈中
//如果一个引用类型有值类型的属性字段也是在堆中的。
}
jietuan 2010-04-22
  • 打赏
  • 举报
回复
那就是说不会有值类型存在栈中喽?

我跟你解释一下,

比如说你执行一个方法,方法里面定义了一个值类型,该值类型存储在栈中。 当你new 引用类型,引用类型方法里面的值类型并不会分配内存,, 但值类型属性字段是分配在堆中。
Wude_S 2010-04-22
  • 打赏
  • 举报
回复
不懂。。学习
兔子-顾问 2010-04-22
  • 打赏
  • 举报
回复
这是说函数调用时候的,函数调用是用栈分配内存的,函数内才涉及到你说的概念。
public void test()
{
int a;//栈
object obj;//堆
}
捷哥1999 2010-04-22
  • 打赏
  • 举报
回复
引用类型是在堆上分配内存的。
sxiaohui8709253 2010-04-22
  • 打赏
  • 举报
回复
引用类型中的值类型(类对象中的值类型字段)据说放在堆上头 栈上头存放一个指向该类对象的引用
单个的值类型肯定放在栈上头了
我是这么理解的
楼下不要笑话我啊

110,560

社区成员

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

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

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