b*****n 发帖数: 2324 | 1 CLR via C#说C++ developer不能控制object放在heap还是stack上是胡说吧。
按照C++的做法new的就在heap上不是很好嘛,new int也在heap上。
按照C#,要想create在heap上的int,要:
int x;
object o = x;
必须要copy上去,而且boxed object又多了两个overhead fields。
C#这个设计算不算一个地道败笔。 |
c****n 发帖数: 21367 | 2 编译执行加速用的吧,new在stack上开销小速度快啊
【在 b*****n 的大作中提到】 : CLR via C#说C++ developer不能控制object放在heap还是stack上是胡说吧。 : 按照C++的做法new的就在heap上不是很好嘛,new int也在heap上。 : 按照C#,要想create在heap上的int,要: : int x; : object o = x; : 必须要copy上去,而且boxed object又多了两个overhead fields。 : C#这个设计算不算一个地道败笔。
|
b*****n 发帖数: 2324 | 3 也有int需要放在heap上的时候,你看明白我说什么了。
【在 c****n 的大作中提到】 : 编译执行加速用的吧,new在stack上开销小速度快啊
|
c**e 发帖数: 2558 | 4
for example?
【在 b*****n 的大作中提到】 : 也有int需要放在heap上的时候,你看明白我说什么了。
|
b*****n 发帖数: 2324 | 5 就是boxing啊
我原文不是说了吗C#的boxing很傻,而且overhead很多。
为啥说它啥,因为C++一个new int就放在heap上了,而且没有overhead,而且让
developer自己选择初始是放在heap上还是stack上。而C#的value type初始×必须×放
在stack上。
【在 c**e 的大作中提到】 : : for example?
|
c**e 发帖数: 2558 | 6 normally you would like to take advange of the .ent
garbage collector, which manages the heap for you.
for the gc to work, the objects on the heap have to
be self-describing. so an int on the managed heap
requires additional info around it. keeping value
type objects on the stack removes this overhead and
also spares the gc from having to manage these objects.
【在 b*****n 的大作中提到】 : 就是boxing啊 : 我原文不是说了吗C#的boxing很傻,而且overhead很多。 : 为啥说它啥,因为C++一个new int就放在heap上了,而且没有overhead,而且让 : developer自己选择初始是放在heap上还是stack上。而C#的value type初始×必须×放 : 在stack上。
|