首页 > 编程语言 >C#中数据到底存在堆上还是栈上_c# 自建类在栈里还是在堆里-CSDN博客

C#中数据到底存在堆上还是栈上_c# 自建类在栈里还是在堆里-CSDN博客

时间:2024-09-01 19:26:42浏览次数:9  
标签:储存 C# 栈上 int 引用 类型 new 堆里

C#中数据到底存在堆上还是栈上_c# 自建类在栈里还是在堆里-CSDN博客

C#的栈与堆

首先复习一下值类型与引用类型

1. 值类型与引用类型

值类型:基本数据类型([int,long,float,char,bool]:System.ValueType,enum,struct)
引用类型:类(所有class),string,接口,数组

2. 栈与堆

局部变量,参数,调用现场存在栈中,一个线程的栈默认只有1M,栈要求先进后出的原则。
static的变量在静态存储区。
const的常量在常量存储区。
引用类型对象中的数据存放在堆内存中,由GC系统回收。

3. 数据到底储存在哪里?

引用类型的对象总是放在堆上。
值类型和指针总是放在它们被声明的地方。

如何理解呢?
其实很简单,看代码:

 

  1.   public class C
  2.   {
  3.   //在类中被声明[跟随此类储存在堆中]
  4.   int i = 0;//值类型
  5.   //在类中被声明[跟随此类储存在堆中]
  6.   S s = new S();//值类型
  7.   //c:对象的引用[跟随此类储存在堆中]
  8.   //new C():引用类型的对象永远储存在堆中
  9.   C c = new C();//引用类型
  10.   }
  11.   public struct S
  12.   {
  13.   int i;//值类型
  14.   S s;//值类型
  15.   C c;//引用类型
  16.   }
  17.    
  18.   //argI:值类型,在参数中被声明[储存在栈上]
  19.   //argS:值类型,在参数中被声明[储存在栈上,且其中的值类型变量i和s都跟随他储存在栈上,而引用类型c的引用也跟随他储存在栈上,而c的对象储存在堆上]
  20.   //argC:引用类型[对象的引用储存在栈上,而对象储存在堆上]
  21.   void Main(int argI,S argS,C argC)
  22.   {
  23.   //如果argI,argS,argC定义在局部变量中也和定义在参数中类似
  24.   int tmpI = 0;
  25.   S tmpS = new S();
  26.   C tmpC = new C();
  27.   }

 

标签:储存,C#,栈上,int,引用,类型,new,堆里
From: https://www.cnblogs.com/yyxone/p/18391613

相关文章

  • COMP20003 Algorithms and Data Structures Spellcheck Lookup
    Assignment2:SpellcheckLookupGeneralYoumustreadfullyandcarefullytheassignmentspecificationandinstructions.Course:COMP20003AlgorithmsandDataStructures@Semester2,2024DeadlineSubmission:Friday6thSeptember2024@11:59pm(endo......
  • Kubernetes利用Volume挂载ConfigMap与Secret
    1、概述在Kubernetes集群中,应用的配置管理是一个关键且复杂的任务。随着应用的扩展和微服务架构的普及,传统的配置文件管理方式已经难以满足动态、灵活的配置需求。幸运的是,Kubernetes提供了强大的配置管理能力,其中ConfigMap和Secret结合Volume挂载的方式是实现这一目标的重要......
  • 【VS Code编写Python】Python 快速入门指南
    1.前言Python扩展使VisualStudioCode成为出色的Python编辑器,可在任何操作系统上运行,并可与各种Python解释器一起使用。首先安装:VS代码Python解释器(任何积极支持的Python版本)VSCode市场上的Python扩展要进一步自定义VSCodeforPython,您可以利用Python......
  • Microsoft 365 解决方案:数据备份的必要性、配置架构
    51CTO博客链接:https://blog.51cto.com/u_13637423业务连续性保障是许多公司最关心的问题。如果发生加密大量数据的勒索软件攻击,或者内部意外或恶意数据删除或覆盖事件的实例,则需要能够尽快使业务恢复正常状态。这是Microsoft365备份产品提供的功能,无论是通过Microsoft365管......
  • 如何解决《罗马2全面战争》中的twitchsdk_32_release.dll错误模块跳出问题?实用技巧与
    当您启动《罗马2全面战争》时,可能会遇到与twitchsdk_32_release.dll相关的错误提示,这可能导致游戏无法正常运行。本篇文章将深入探讨这一问题的原因以及提供多种解决方法,帮助您顺利启动游戏。twitchsdk_32_release.dll错误模块跳出的原因twitchsdk_32_release.dll文件出现......
  • 记录elasticsearch-analysis-dynamic-synonym从8.7.0升级到8.15.0所遇到的问题
    记录elasticsearch-analysis-dynamic-synonym从8.7.0升级到8.15.0所遇到的问题一、问题伊始今天打算用elasticsearch最新版本来学点东西,发现安装es插件就遇到了许多问题,于是便通过此篇博客来记录问题的整个过程。去年我学习用的elasticsearch版本为8.7.0,当时GitHub有一个大佬直......
  • 战地1弹窗错误DirectX Error怎么办?《战地1》DirectX错误修复手册
    《战地1》是一款广受欢迎的第一人称射击游戏,但在游玩过程中,一些玩家可能会遇到DirectX错误弹窗提示,这通常意味着游戏在运行时遇到了与DirectX相关的兼容性或配置问题。本文将详细介绍这种错误的原因以及如何解决这一问题。DirectX错误的原因DirectX版本过旧: 如果您的计算机......
  • 前端css定位
    一、定位position位置:top:距离上面的位置bottom:距离下面的位置left:距离左边的位置right:距离右边的位置1.相对定位relative当前位置也是自身位置进行移动(参照物)css代码html代码<style>#box{width:500......
  • 前端 css基础
    1.什么是css是一组样式设置的规则,用于控制页面的外观样式2.为什么使用css1.实现内容与样式的分离,便于团队开发2.样式复用,便于网站的后期维护3.页面的精确控制,让页面更精美3.css作用1.页面外观美化2.布局和定位4.css应用方式也称......
  • 大厂面试官:你真的了解WebSocket么?
    希望大家能关注点赞,创作不易且没收益,您的小小举动却能给予我大大的鼓励,会激励我继续创作出高质量文章......