为什么值类型创建在堆栈上而引用类型创建在堆上?

2024-02-15

编程语言书籍通常解释说,值类型是在堆栈上创建的,而引用类型是在堆上创建的。

我的问题是为什么。


我的问题是为什么。

他们为什么要“解释”这一点?因为有时作者自己也不太了解,有时他们又懒得正确解释。事实却相当复杂。

幸运的是,埃里克·利珀特(Eric Lippert)围绕这一点撰写了大量文章:

  • 堆栈是实现细节,第 1 部分 https://learn.microsoft.com/ro-ro/archive/blogs/ericlippert/the-stack-is-an-implementation-detail-part-one
  • 堆栈是实现细节,第 2 部分 https://learn.microsoft.com/ro-ro/archive/blogs/ericlippert/the-stack-is-an-implementation-detail-part-two
  • 关于值类型的真相 https://learn.microsoft.com/en-us/archive/blogs/ericlippert/the-truth-about-value-types

虽然我通常会尝试至少在此处包含完整答案的释义,但我不会在这里这样做 - 因为解释它非常简短地几乎必然会给出误导性的结果。只要去阅读那些博客文章 - 然后就是埃里克写的其他所有内容。这需要几周的时间,但你会很高兴你做到了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么值类型创建在堆栈上而引用类型创建在堆上? 的相关文章

  • 寻找自定义 SynchronizationContext 的示例(单元测试所需)

    我需要定制同步上下文 http msdn microsoft com en us library system threading synchronizationcontext aspx that 拥有一个运行 Posts 和 Sends
  • Visual Studio 扩展找不到所需的程序集

    我为 Visual Studio 2013 编写了一个扩展 因为该死的组合框错误 https stackoverflow com questions 7800032 cancel combobox selection in wpf with
  • 为 Razor 组件添加 XML 文档

    有没有办法为 Razor 组件添加 XML 文档 我注意到 Microsoft 的一些组件有 IntelliSense 中显示的文档 然而 将通常的 XML 文档添加到代码隐藏部分类似乎不起作用
  • 该变量未声明或从未分配警告

    这是基类 public class BaseClass UserControl protected ListView list protected TreeView tree public BaseClass 儿童班 public part
  • 在c#中创建sql连接

    我是这个网站的新手 也是编程的新手 我目前正在通过销售点创建库存系统 它使用模态和非模态形式 我的问题是 我正在研究change password对话框必须连接到数据库才能覆盖密码字段 我使用的数据库是Microsoft SQL Serve
  • 为什么 ᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᏍᎦᏚᎩ 是美国的本土名称?

    当我使用这段代码时 var ri new RegionInfo us var nativeName ri NativeName why is nativeName然后是字符串 in Cherokee https en wikipedia o
  • 下载 .NET 3.5 的实体框架

    哪个版本的实体框架 EF 我可以用在 NET 3 5我可以在哪里下载这个旧版本 对于 Net 3 5 您可以使用 EF v1 您是否尝试从以下位置下载 Microsoft NET Framework 3 5 Service Pack 1 h
  • InvalidOperationException:无法解析类型“Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务

    我开始将我的 asp net core RC1 项目转换为 RC2 并面临现在的问题IHttpContextAccessor没有解决 为了简单起见 我使用 Visual Studio 模板创建了新的 ASP NET RC2 项目ASP NE
  • Microsoft Teams 中私人消息的传入 Webhook

    我可以从 C 应用程序或 PS 脚本创建传入 Webhook 将 JSON 消息发送到 MSFT 文档所解释的通道 但是 我想使用传入的 webhook 将 JSON 消息从我的应用程序发送到用户 作为私人消息 就像 Slack 允许的那样
  • 如果浏览器在 asp .net 中关闭,请从浏览器中注销?

    我的要求有点复杂 用户正在使用 Web 浏览器访问数据库 而在访问数据库时 如果用户关闭活动页面而不是注销会话 该会话需要自动注销 有人可以指导我如何做这个吗 我在母版页中使用了jquery onbeforeunload 我收到消息离开页面
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 生成 .tail IL 指令的简单 F# 代码是什么?

    我想看看 tailIL 指令 但我一直在编写的使用尾部调用的简单递归函数显然已优化为循环 我实际上是在猜测这一点 因为我不完全确定反射器中的循环是什么样的 我绝对没有看到任何 tail不过操作码 我在项目的属性中检查了 生成尾部调用 我还尝
  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • 当用户打开文件时如何锁定对文件的访问?

    我正在编写一个 C NET 程序 该程序使用 XmlSerializer 对当前用户正在处理的项目与 XML 文件进行序列化和反序列化 这工作正常 但我试图找到一种方法来防止两个用户从网络驱动器打开同一个文件并让一个用户覆盖前一个用户的保存
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 关联类的正确使用

    我是 UML 的新手 我不确定我的图表是否正确 我希望得到比我更有经验的人的建议 我的问题的陈述说 学生学习课程 每个学生可以选修几门课程 每门课程 学习 任何课程都可以有多个学生学习 学生由数字代码识别 有姓名 出生日期和一个或多个国籍
  • 使用 javascript 将数据从一个域发送到另一个域(我可以访问两个网页的 )

    我可以访问两个页面上都有标签 我需要将数据从一个页面发送到另一页面 两个页面都位于不同的域中 页面 A 域 www foo com http www foo com 页面 B 域 www bar com http www bar com 如
  • C++ stringstream >> int 返回零

    我正在编写一个函数来返回数字的反转 即它转换int 1234 to int 4321 这就是我目前所拥有的 include
  • eclipse的jade模板语法支持吗?

    我刚刚开始使用nodejs 模板引擎jade 不幸的是 我的 IDE eclipse 似乎不支持此语法 并且无法正确突出显示 是否可以向 eclipse 添加对 jade 文件的支持 作为 Nodeclipse 工作 www nodecli
  • Google应用程序脚本网络应用程序,如何创建登录按钮?

    我在 Google Drive 中创建了由 Google 电子表格支持的脚本 并将其发布为网络应用程序 设置 执行应用程序为 我 和 谁有权访问该应用程序 任何人 甚至匿名 主页提供电子表格中的 html 内容 基本功能是 随机互联网用户
  • 为什么rotateY(翻转)css3动画在Chrome中闪烁?

    我做了一个jsFiddle http jsfiddle net Grezzo JR2Lu http jsfiddle net Grezzo JR2Lu 当您按下键盘上的 i 键时 图片会翻转以显示一些文本 但在翻转动画期间 在 Chrome
  • 使用 C# 并行下载多个文件

    我想使用 C 并行下载文件 为此 我编写了这段代码 该代码运行良好 但问题是 UI 冻结了 using System using System Collections Generic using System IO using System
  • Android Loopj Async Http 在 1.4.5 更新后崩溃

    Android Loopj Async Http lib 的新更新已发布 并且发生了很大变化 现在需要手动设置Looper prepare 否则默认使用同步模式而不是异步模式 我不明白我需要设置它的地方 Logcat 07 09 08 16
  • 如何重新运行 Apache Airflow 中所有失败的任务?

    我有一个包含数万个任务的 Apache Airflow DAG 运行后发现其中少数任务失败了 我修复了导致某些任务失败的错误 并且我想重新运行仅失败的任务 这SO帖子建议使用 GUI 来 清除 失败的任务 如何在 Airflow 上重新启动
  • Express app.set 与 app.use

    我意识到这可能是一个相当菜鸟的问题 并且有大量关于这件事的文章 但我很难找到对我来说清楚且有意义的解释 我在stackoverflow也没有找到这个问题 我的问题很简单 在express中 app set和app use之间有什么区别 我的
  • Crystal Reports - 值不能为空。参数名称:窗口

    我最近在尝试通过对话框将水晶报表表单加载到我的 WPF 应用程序中时遇到了一个不寻常的错误 该报表将显示为加载几秒钟 然后抛出一个错误 指出 值不能为空 参数名称 窗口 这让我很困惑 据我所知 水晶报表不使用名为 window 的参数 这是
  • Django 中的请求工厂中没有数据的 POST

    我正在将 django 应用程序从 1 x 移动到 2 2 运行单元测试时 出现有关将 None 作为数据发布的错误 以前的版本允许发None吗 有没有办法通过 RequestFactory 发布 None 我不想给出空字符串 因为需要验证
  • 使用两个字段的 Elasticsearch 日期范围查询

    我正在存储具有两个字段的文档 startDate 和 endDate 我想使用输入日期运行弹性查询并返回 startDate 和 endDate 包含该日期的所有文档 例如 doc1 source startDate 2015 01 01
  • 开窗器焦点,或活动

    我想在新选项卡中打开一个窗口 但是当我希望该开启页面处于活动状态 而不是新页面时 我该怎么做 非常感谢 我的代码是这样的 要将焦点集中到新窗口 但您不希望这样 并且默认情况下它可能会具有焦点 var newWindow window ope
  • 在数据框中应用函数时,dim(X) 必须具有正长度

    我正在尝试将此函数应用于数据框列 best recom lt function x n 1 y lt result2 x order result2 x n inds which result2 x y arr ind TRUE recom
  • 在 div 中垂直和水平居中文本

    我有一个 div 其中包含覆盖有文本的图形背景 我想使这个元素水平和垂直居中 但我无法让文本垂直居中 到目前为止 我有以下代码 div div img src buttonbackground png class stretch alt d
  • Visual Studio 2013 - Git - 获取远程分支

    我开始使用 Visual Studio 2013 和 Visual Studio Online 的内置 Git Team Explorer 工具 我非常熟悉如何通过 Git Shell 执行此操作 但似乎不知道如何通过 VS 2013 界面
  • 如何停止/退出 AWS Glue 作业 (PySpark)?

    我成功运行了一个 AWS Glue 作业 可以转换数据以进行预测 如果达到特定条件 我想停止处理并输出状态消息 正在运行 if specific condition is None s3 put object Body json str B
  • 应用程序被终止时是否可以收到 FCM 推送通知?

    我正在开发一个电子邮件应用程序 我希望用户在收到新电子邮件后立即收到推送通知 为此 我使用 FCM 我刚刚通过以下链接尝试使用 FCM 推送通知 为了测试 FCM 提供哪些功能 但我面临的问题是 当应用程序位于前台或后台时 设备会收到推送通
  • 为什么值类型创建在堆栈上而引用类型创建在堆上?

    编程语言书籍通常解释说 值类型是在堆栈上创建的 而引用类型是在堆上创建的 我的问题是为什么 我的问题是为什么 他们为什么要 解释 这一点 因为有时作者自己也不太了解 有时他们又懒得正确解释 事实却相当复杂 幸运的是 埃里克 利珀特 Eric