C#中分为值类型和引用类型。
值类型不能直接就说是存在栈区(这是错误的结论)。在类实例化后中的数据,全部都是存储在堆区。
引用类型也不能直接说栈区堆区什么的。
正确的解释应该是:1.值类型是直接存储数据。
2.引用类型是存储数据的引用。例如:数组,他的数据实际是位于堆区的,而声明中存储的只是一个数据的引用。
值类型相对于引用类型优点:值类型是直接存储数据,而引用类型是先在堆区开辟空间,然后在存数据的引用,要比值类型多一次寻址的过程,相对值类型来说访问速度慢一些。
值类型相对于引用类型的缺点:值类型是直接存储的数据,这会导致直接存储的数据庞大,如果值类型声明在栈区,那数据都存储在栈区,这就直接导致庞大的数据直接都在栈上,而栈区相对堆区来说内存是比较小的,栈上数据太大不仅影响计算机运行速度,更甚者会导致栈溢出,从而导致程序奔溃,而引用类型不存在此问题。