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

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(使用前将#替换为@)

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

  • 如何使用 WebResponse 下载 .wmv 文件

    我使用以下代码通过 WebResponse 获取 wmv 文件 我正在使用一个线程来调用这个函数 static void GetPage object data Cast the object to a ThreadInfo ThreadI
  • 获取 System.Drawing.Font 宽度?

    我正在使用 Net 工具进行一些 2D 绘图 System Drawing Font uses a GetHeight 返回以像素为单位的高度 我缺少一个GetWidth 检索宽度 我应该用什么 Use Graphics MeasureSt
  • project.json 等效于 InternalsVisibleTo

    Net Core 的项目 json https learn microsoft com en us dotnet articles core tools project json copyright允许配置传统 Net 应用程序使用通常放置
  • Lightspeed 与 NHibernate

    有什么体验光速 http www mindscape co nz products LightSpeed comparison aspx Mindscape 提供的比较并没有过多说明 NHibernate Lightspeed 看起来很灵活
  • 点击浏览器后退按钮时如何刷新 ASP .NET MVC 页面

    我刚刚发现 当我单击任何 ASP NET MVC 页面上的浏览器后退按钮时 没有任何反应 并且页面不会更新 并且只有当您单击 F5 时才会更新 主要问题是我对页面的 DOM 进行了一些更改 即添加表格行 选择单选按钮等 当我通过点击浏览器后
  • MVC2 中隐藏字段的替代方案

    我有一个 viewModel 其中包含一个在传递给部分视图之前填充的字符串 我需要能够在发布表单时取回数据 目前我已经创建了一个隐藏字段并将数据绑定到它 然后 当回发时 我可以从表单集合中获取数据 这并不完全是我想要的 我希望数据完全隐藏在
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 哪些属性有助于运行时 .Net 性能?

    我正在寻找可用于通过向加载器 JIT 编译器或 ngen 提供提示来确保 Net 应用程序获得最佳运行时性能的属性 例如我们有可调试属性 http msdn microsoft com en us library k2wxda47 aspx
  • 根据 VS2008 中的构建配置排除整个文件

    我的项目有三种不同的配置 这三种配置不需要将所有文件构建到应用程序中 实际上 我更希望能够从构建中排除这些文件 这将使我的应用程序更加轻量级 我正在寻找的是 if MYCONFIG or if DEBUG声明但用于文件 我已经读到这可以通过
  • 对于 HTTPS,Request.UrlReferrer 为 NULL

    我在用 Request UrlReferrer AbsoluteUri 在我的项目中获取托管我的应用程序的 URL 如果我从 http 主机重定向 我可以获得 URL 但如果我从 https 主机重定向 我将得到 null 我怎样才能得到
  • 我应该如何缓冲绘制的矩形以提高性能(C#/.NET/WinForms/GDI+)

    我在做什么 我正在开发一个 C NET 4 7 2 WinForms 应用程序 它使用以下命令在表单上绘制大量填充矩形Graphics FillRectangle https learn microsoft com en us dotnet
  • 如何检查 FTP 目录是否存在

    寻找通过 FTP 检查给定目录的最佳方法 目前我有以下代码 private bool FtpDirectoryExists string directory string username string password try var r
  • 模拟对象 - 将所有方法声明为虚拟方法还是使用接口?

    与 Java 不同 net 中的方法默认不是虚拟的 为了使用大多数模拟对象框架 您要么必须将要在模拟上使用的方法标记为 真实 对象上的虚拟方法 要么必须有一个可以模拟被测试类将使用的接口接受代替执行 将每个方法标记为虚拟似乎是一种不好的形式
  • F# 命名约定

    F 是否有 官方 命名 大小写约定 我总是怀疑是否使用 C 风格 Class MyFunctionName or Module my function name 在 F 中 您应该混合 BCL 类和 F 库类 它们具有不同的大小写 并且代码
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 关联类的正确使用

    我是 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