C#基元类型属于值类型吗?如果不属于那么基元类型与值类型的区别是什么?基元类型又是如何分配内存空间?
答案:2 悬赏:70 手机版
解决时间 2021-03-07 04:07
- 提问者网友:夢醒日落
- 2021-03-06 22:38
C#基元类型属于值类型吗?如果不属于那么基元类型与值类型的区别是什么?基元类型又是如何分配内存空间?
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-03-06 23:24
基元类型就是那种C#编译器直接支持的数据类型,
编译器直接支持的类型。
sbyte / byte / short / ushort /int / uint / long / ulong /char / float / double / bool /decimal /object / string
从上面可以看出,基元类型中除了object,string其他都属于值类型,
你可以理解为蓝色关键字的那种.
内存分配按照它是值类型,还是引用类型来分.
对于值类型的实例,CLR在运行时有两种分配方式:
(1) 如果该值类型的实例作为类型中的方法(Method)中的局部变量,则该实例被创建在线程栈上;(2) 如果该值类型的实例作为类型的成员,则该实例作为引用类型(引用类型在GC堆或者LOH上创建)的实例的一部分,被创建在GC堆上。
对于引用类型的实例,CLR在运行时也有两种分配方式:
(1) 如果该引用类型的实例的Size<85000Byte,则该实例被创建在GC(Garbage Collection)堆上(当CLR在分配和回收对象时,GC可能会对GC堆进行压缩);
(2) 如果该引用类型的实例的Size>=85000byte,则该实例被创建在LOH(Large Object Heap)上
编译器直接支持的类型。
sbyte / byte / short / ushort /int / uint / long / ulong /char / float / double / bool /decimal /object / string
从上面可以看出,基元类型中除了object,string其他都属于值类型,
你可以理解为蓝色关键字的那种.
内存分配按照它是值类型,还是引用类型来分.
对于值类型的实例,CLR在运行时有两种分配方式:
(1) 如果该值类型的实例作为类型中的方法(Method)中的局部变量,则该实例被创建在线程栈上;(2) 如果该值类型的实例作为类型的成员,则该实例作为引用类型(引用类型在GC堆或者LOH上创建)的实例的一部分,被创建在GC堆上。
对于引用类型的实例,CLR在运行时也有两种分配方式:
(1) 如果该引用类型的实例的Size<85000Byte,则该实例被创建在GC(Garbage Collection)堆上(当CLR在分配和回收对象时,GC可能会对GC堆进行压缩);
(2) 如果该引用类型的实例的Size>=85000byte,则该实例被创建在LOH(Large Object Heap)上
全部回答
- 1楼网友:西岸风
- 2021-03-07 00:11
.........
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯