.net框架中值类型和引用类型的内存分配

2024-05-01

我可以阅读一篇高级文章来解释如何在 .net 框架中为不同类型(值和引用)分配内存。

例如,我们知道值类型是在堆栈上分配空间的,但它是如何管理的呢?

另外,如何在堆中管理引用类型以及实际值存储在哪里。 (引用类型像任何Class一样都会包含很多值类型,它们保存在哪里以及如何管理)


它比你想象的更复杂。即使您声称“值类型在堆栈上分配”也是不正确的。例如:

class Foo
{
    int x;
}

int是一个值类型,但 x 的值将始终位于堆上,因为它将与作为类的 Foo 实例的其余数据一起存储。

此外,匿名函数和迭代器块的捕获变量使事情变得更加棘手。

我有一个关于 C# 堆/栈内存的文章 http://pobox.com/~skeet/csharp/memory.html您可能会发现有用,但您可能还想阅读 Eric Lippert 的博客文章“堆栈是一个实现细节” http://blogs.msdn.com/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx。特别是,未来的 C# 编译器可以决定将其所有局部变量存储在堆上,使用堆栈仅保存对在方法开始时创建的实例的引用...这不会违反 C# 规范全部。

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

.net框架中值类型和引用类型的内存分配 的相关文章

随机推荐

  • Python 请求与 PyCurl 性能

    Requests 库与 PyCurl 的性能相比如何 我的理解是 Requests 是 urllib 的 python 包装器 而 PyCurl 是本机 libcurl 的 python 包装器 因此 PyCurl 应该获得更好的性能 但不
  • Java - 哪个是 Graph 的最佳实现结构?

    图很大但是无向 边缘未加权 在我的实现中 我必须找到具有最大度数的顶点并在顶点和边上进行删除 链接列表 数组列表 地图 哪一种更适合我的实施 表示图的两个基本数据结构是 adjacency list the adjacency matrix
  • Angular 2子组件引用父组件

    我有一个包含三个组件的应用程序 应用程序 编辑视图 对话框 应用程序组件包含 EditView 组件 该组件可以包含许多其他 EditView 组件和一个 Dialog 组件 如果 Dialog 组件在页面上可见 对话框组件包含应用程序组件
  • 什么构成“有效”C 标识符?

    根据 Zaibis 的建议 并且与我自己的相关 answer to 宏名称的有效字符是什么 https stackoverflow com a 34315237 547214 也g 不允许的标识符中的 和其他 Unicode 字符 http
  • Timer 和 TimerTask - 如何从 TimerTask 运行中重新安排 Timer

    基本上我想做的是制作一个在 x 秒后运行特定 TimerTask 的计时器 但随后 TimerTask 可以重新安排计时器在 y 秒后执行任务 示例如下 它在我尝试在 TimerTask 运行中安排此任务的行上给出错误 线程 Timer 0
  • SwiftUI如何用TabView隐藏导航栏

    我正在使用 SwiftUITabView inside NavigationView 但我就是无法在iOS 13 0模拟器中隐藏导航栏 这是代码 import SwiftUI struct TestView View var body so
  • 模拟、存根和假对象之间有什么区别[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 尽管有大量资源 但即使在 SO 上 这些 Q A 中也仅对其中两个术语进行了比较 那么 简而言之 它们各自是什么 它们之间有何关系 或者他们根本就没有
  • 如何通过id获取消息discord.py

    我想知道如何通过消息 ID 获取消息 我努力了discord fetch message id and discord get message id 但两者都会提出 Command raised an exception Attribute
  • 如何从字符串中删除或替换所有标点符号?

    我有一个由单词组成的字符串 其中一些包含标点符号 我想删除它们 但我一直不知道如何做到这一点 例如 如果我有类似的东西 var words Hello this is a string 我希望能够创建一个数组 Hello this is a
  • Rails - 从对象哈希创建选择标签

    我需要根据哈希中的可用值创建一个选择框 例如 我有一个 事物 该 事物 有多种状态字段 1 gt State A 2 gt State B 通过事物上的方法可用 我如何从中构建一个选择标签 正如施罗克韦尔所说 Hash each a 返回以
  • 如何删除WKWebView中的缓存?

    任何一个合作过的人WKWebView并尝试清除缓存 如果是 该怎么做 有什么例子吗 P S Normal NSURLCache不管用 更新的 Swift 5 版本 WKWebsiteDataStore default removeData
  • 否定句子的算法

    我想知道是否有人熟悉算法句子否定的任何尝试 例如 给定一个句子 这本书很好 请提供任意数量的意思相反的替代句子 例如 这本书不好 甚至 这本书不好 显然 以高精度实现这一点可能超出了当前 NLP 的范围 但我确信在这个主题上已经有了一些工作
  • Bash 脚本问题

    我可以很好地运行这个命令 并得到我想要的输出 ifconfig eth0 grep HWaddr awk print 5 但是 当我将命令设置为变量并打印该变量时 出现错误 CASS INTERNAL ifconfig eth0 grep
  • 为什么使用 DIV 或 span 标签比使用表格布局“更好”? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么不在 HTML 中使用表格进行布局 https stackoverflow com questions 83073 why not use tables for layout in html 为
  • 输入实例不是 JSON 格式

    我正在使用 Google 的公共模板和示例来练习 GCP ML 引擎here https github com GoogleCloudPlatform cloudml samples tree master cloudml template
  • 从头开始使用映像部署无法启动

    我正在使用以下内容构建图像Dockerfile FROM golang 1 19 2 bullseye as builder COPY src src WORKDIR src RUN CGO ENABLED 1 go build race
  • 使用新的 iOS Facebook SDK API (3.0) 上传照片

    如何使用新的 API SDK 从 iOS 应用程序将照片上传到 Facebook 我已经尝试过 但一事无成 只能继续原地踏步 这是我目前拥有的代码 void dataForFaceboo self postParams NSMutableD
  • Jetpack Compose - 布局可重用组件

    为了练习 Jetpack Compose 中的可重用组件 我开始了一些练习 见下图 正如我想象的那样 绿色行 输入行以及之间的行具有相同的结构 第一个元素获得了可用空间 第二个元素获得了 50 dp 最后一个元素获得了 70 dp 我尝试将
  • Jersey REST/ JAXB 错误,映射接口

    我必须使用 REST Web 服务中的接口 这是接口 Specs java XmlJavaTypeAdapter MyAdapter class public interface Specs public BaseProperties ge
  • .net框架中值类型和引用类型的内存分配

    我可以阅读一篇高级文章来解释如何在 net 框架中为不同类型 值和引用 分配内存 例如 我们知道值类型是在堆栈上分配空间的 但它是如何管理的呢 另外 如何在堆中管理引用类型以及实际值存储在哪里 引用类型像任何Class一样都会包含很多值类型