据说值类型存储在堆栈中.但是当我们声明一个值类型时会发生什么new?例如
int a;
存储在堆栈中,但是
int b = new int();
b存储在哪里?堆还是堆?这让我很困惑.它就像一个引用,但它是一个值类型.
Eri*_*ert 13
据说值类型存储在堆栈中
这经常说,但显然是错误的.当你创建一个100个整数的数组时,那些内存是存在于堆栈还是堆上?
存储的生命周期与存储类型有关的想法简直是错误的.正确的说法是,可以从短期存储中分配具有已知短寿命的值类型的变量,当您这样说时,这听起来非常明显.
确保你清楚:它只是假的,int i;意思是"在堆栈上分配我".这意味着"为我分配存储"; 如果已知存储寿命很短,则可以在短期存储中分配.否则它将在长期商店中分配.
但是当我们用new声明一个值类型时会发生什么?
您认为"新"会导致从堆中分配新存储.它不是.将"new"视为"获取存储然后调用构造函数"的含义.
为类类型获取的存储始终在堆上,因为不知道类数据的生命周期是短的.为值类型获取的存储记录为在堆栈上,然后将值复制到其最终目标,该目标可能位于堆栈或堆上.但是,如果编译器可以确定这样做是安全的,那么可以复制分配和复制.
以下是一些有用的文章:
http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx
http://blogs.msdn.com/b/ericlippert/archive/2010/10/11/debunking-another-myth-about-value-types.aspx
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |