请教值类型对象的内存分配时机?

ggyz 2005-03-25 11:33:53
值类型对象的内存是何时分配的?谢谢
...全文
153 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggyz 2005-03-31
  • 打赏
  • 举报
回复
这几天郁闷中,没心思讨论技术问题了,揭贴。

ps:再次感谢速马。
ggyz 2005-03-26
  • 打赏
  • 举报
回复
呵,首先感谢速马大哥的回答。
第一个问题,其实我是想问,引用,就是指针啦,要多大空间。C++里面是4个字节吧(32位么),C#把名字改了,不知道有什么变化没有?
第二个问题,呵呵,太晚了,明天再来写。
速马 2005-03-26
  • 打赏
  • 举报
回复
.NET里头都是引用,只能说猜测GC上的引用和C++的指针占用的空间一样
我也不确定
但是太关心这个问题已经没啥意义了吧
在.NET你不可能不去用GC堆
速马 2005-03-25
  • 打赏
  • 举报
回复
// C#里面引用要多大空间啊
GC堆会无限增长直道内存和虚拟内存全部耗尽,然后系统提出内存不足警告
堆栈的话是有限制,可能弹出StackOverflowFlow异常
一般只要你不用死循环的代码去检查JIT的能力的话,StackOverflowFlow异常是不会出现的

// 另外,“如果此值类型有构造函数,则在类型的构造函数起始处执行”这句话有点问题吧。
比如说这样的代码:
class Person
{
DateTime Birthday = new DateTime(xxx);
public Person(){}
}
编译后就变成了:
class Person
{
DateTime Birthday;
public Person()
{
Birthday = new DateTime(xxx);
}
}
等价的代码就是这个样子,我是这个意思
hyj_828 2005-03-25
  • 打赏
  • 举报
回复
help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/csref
ggyz 2005-03-25
  • 打赏
  • 举报
回复
恩,听速马大哥这么一说我明白了。
在方法体中声明的时候分配空间。值类型的话就是分配了这个对象的空间了。引用类型分配存放一个引用的空间。顺便问一下,C#里面引用要多大空间啊?
另外,“如果此值类型有构造函数,则在类型的构造函数起始处执行”这句话有点问题吧。值类型的构造函数是不会在new它所属的引用类型对象的时候执行的。必须另外显式调用。
delphi_dcs 2005-03-25
  • 打赏
  • 举报
回复
什麼叫值類型啊大哥
速马 2005-03-25
  • 打赏
  • 举报
回复
对于在函数内部的情况:
在C#和VB.NET编译器,值类型总是在线程堆栈上安排空间
这样的话,当程序执行到声明值类型变量的时候,在栈上创建空间

对于值类型作为类型的成员的情况:
在new这个对象的时候分配内存空间(在GC Heap),如果此值类型有构造函数,则在类型的构造函数起始处执行

可以去分析下IL代码
ggyz 2005-03-25
  • 打赏
  • 举报
回复
赋值的时候
或在new的时候(自动赋默认值)

这个肯定不对哦
ggyz 2005-03-25
  • 打赏
  • 举报
回复
我问的是值类型哦
yezie 2005-03-25
  • 打赏
  • 举报
回复
当aa = null后,内存又释放了
yezie 2005-03-25
  • 打赏
  • 举报
回复
赋值的时候
或在new的时候(自动赋默认值)
ggyz 2005-03-25
  • 打赏
  • 举报
回复
up
大家对这个问题没兴趣?

110,499

社区成员

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

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

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