class Arr{
Arr()
{}
}
主程序:
Arr[] a;
a=new Arr[1];//此处是分配引用内存?
a[0]=new Arr;//此处分配内存?
a是一个对象,是Arr[]类型,a[0]也是一个对象。是Arr类型
前者实例化了一个Arr[]对象,后者实例化了一个Arr对象。
另外,Arr和Arr[]一样,都是引用类型。除非你把Arr定义成结构体。
前一个实例化分配多少内存?是分配保存地址的内存还是分配对象的内存?
C#是自动垃圾回收的语言,除非使用unsafe,否则不用指针。
类似的,C#叫做引用。
刚才回答你了,Arr和Arr[]都是引用类型,两者都存在托管堆上。
都是引用类型,记得结构体是值类型
分配了多少内存不好说。因为代码对齐的需要,一个对象占用的内存不是它所有成员占用内存的总和。除非你用结构体,并且强行指定
那a=new Arr[1]语句是分配了2个堆的内存了吗?
因为我做一个程序,用list的话不是那么方便,想先用a=new Arr[10000]来预留这么多位置,但可能有部分是没用到的,不知道没用的部分会不会占用大量内存
C#是和C++完全不同的语言。不要用C++的思维去理解C#。
Arr[] a 的时候,会为a在堆栈上分配一个空间并标明是a
a=new arr[1]的时候,会在托管堆上分配两块连续空间用来装arr类型的数组的元素,并在堆栈上的a中存储前者的地址
a=new Arr[1];//此处已经分配内存空间了,只是数据还不可用。
数组和类分配内存的时候都是分配在堆上。