社区
C#
帖子详情
请教值类型对象的内存分配时机?
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
大家对这个问题没兴趣?
【JVM系列】读懂Java虚拟机(JVM)这一篇就够了!
读懂Java虚拟机(JVM)这一篇就够了!内存管理1、运行时数据区域1.1 堆1.2 虚拟机栈1.3 本地方法栈1.4 方法区栈1.5 程序计数器1.6 直接内存2、Java
对象
2.1
对象
的创建2.2
对象
的内存布局2.3
对象
的访问定位垃圾回收和
内存分配
3.1
对象
已死吗?3.2 垃圾回收算法3.2.1 几种算法思想3.2.2 HotSpot算法实现3.3 垃圾收集器3.3.1 Serial新生代收集器3.3.2 ParNew新生代收集器3.3.3 ParNew Scanvenge收集器3.3.4 Se
c++后端相关(加深记忆,抄的github和小林coding)
宏定义相当于字符替换,而const是常量声明;宏定义是预处理器处理,而const是编译器处理;宏定义五
类型
安全检查,而const有
类型
安全检查;宏定义不分配内存,const要分配内存;宏定义存在代码段,const存在数据段;析构函数设为私有,类生成
对象
就只能定义在堆上,因为c++是静态绑定语言,为类
对象
分配栈空间时,会先检查类析构函数的访问性,若析构函数不能访问就不能在栈上创建
对象
;第一阶段,使用 new 在堆上寻找可用内存,分配给
对象
;第二阶段,调用构造函数生成
对象
。
java知识点汇总
文章目录面试前的工作礼貌常识公司及岗位了解自我介绍充足的知识储备提问环节面试后的总结javaSEjdk1.8新特性java语言的特征如何实现跨平台谈谈你对面向
对象
的认识理解聊聊面向
对象
的特征,封装,继承,多态访问权限
对象
创建过程? 从jvm的角度出发,延伸到
对象
在内存中的存储空间Java类初始化顺序java中创建
对象
的方式
对象
克隆,浅克隆,深克隆构造方法
对象
与引用静态static抽象类和接口ObjectString特征为什么不可变String类不可变性的好处? 为什么设计为不可变.String的
值
不可
Java实现面向
对象
编程
目录 第1章... 10 抽象和封装... 10 1.1用面向
对象
设计电子宠物系统... 14 1.1.1为什么使用面向
对象
... 14 1.1.2使用面向
对象
进行设计... 15 1.2通过创建
对象
实现领养宠物功能... 17 1.2.1创建类的
对象
... 17 1.2.2构造方法及其重载... 23 1.2.3常见错误... 28 1.3使用封装优化电子宠物系统的类... ...
iPhone开发中的内存管理
移动开发的特点:资源的有限性。作为手持设备,iphone的内存与传统的PC不可同日而语,这就要求我们在开发IOS程序的过程中,首要也是最重要的任务就是解决内存释放问题,本文将在网络上搜集的关于内存管理的经验予以分享。 开发iPhone 应用程序并不难,基本上就是三个词 - “memory, memory, memory” 。iPhone OS 对内存的要求很严格,有memory
C#
110,499
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章