半斤八两的程序员

.net默默无语的追随者.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Anytao大大的《你必须知道的.NET》入手

Posted on 2009-04-25 13:21  炸弹  阅读(221)  评论(0)    收藏  举报

下午快递的叔叔送来了这本书,包装的3层,来回拆了半天。orz

偶然机会看到了Anytao大大的博客,文章的风格果然别有一番味道,马上订阅,看到还有一本他的书,找机会就给入了。

随便翻开一页就写了一个我没注意过的细节:

引用
AType[] myType = new AType[10];
试问:如果AType是值类型,分配了多少内存;而如果是引用类型,有分配了多少内存?

分析:根据CLR的内存机制,数组本身是引用类型,内存分配于托管堆,而myType为指向托管堆的引用。不同的是值类型和引用类型数组在托管堆的布局是有区别的:如果AType为Int32类型,则表示其元素是值类型,myType将保存指向托管堆中的一块大小为4 * 10byte的内存地址,并且将所有元素赋值为0;而如果AType为引用类型,则数组由10个引用组成(我说:10个引用都在堆栈上),并且所有元素都被设置为null。

CLR底层蛮有趣的,建议大家多看看。

 

風之谷