动态大小类型总是在堆上吗?

2024-01-16

我对 Rust 的学习让我了解了动态大小类型 (DST),并且我知道这些类型的大小在编译时无法得知。例如。str.

我现在的问题是,我说 DST 永远不能存在于堆栈上,它们只存在于堆上,这样说对吗?

另外,另一方面,说大小类型可以存在于堆栈中是否正确:

(eg. let x:u32 = 10)

但也可以存在于堆上,例如通过使用 Box

(eg let x: Box<u32> = Box::new(10))

上述这些说法是否正确?


未调整大小的类型通常最好解释为“只是数据”。无论数据位于何处对于 DST 的定义并不重要。

例如,您可以让 dst 位于堆栈中:

let x = [1, 2, 3];
let y = &x[..];

数组x存在于堆栈中,当您将其放在引用下时,其数据被理解为 dsty.

y有类型&[i32]——也就是说,引用了一些i32s。在这种情况下,引用指向堆栈上的数据。

您可以放置​​ DST 的其他值得注意的地方是:

  • 通过分配的堆(Box, Rc, Arc, Vec, etc.)
  • 程序的只读部分(通常通过字符串常量,例如"abc").
  • 未知地点(通过extern types 在夜间代码中)。

本质上,任何类型都可以存在于堆栈和堆上(除非与生命周期相关的问题)。如果堆栈上有大小类型,请将其装箱并将其放在堆上。如果您想要堆栈上的切片,请切片为数组或字符串。如果您想要一个特征对象,请引用堆栈上的值等。

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

动态大小类型总是在堆上吗? 的相关文章

随机推荐

  • http://localhost/ 无法在 Windows 7 上运行。有什么问题吗?

    我打开有一个大问题http 本地主机 http localhost 在 Windows 7 测试版 上 我安装了这个操作系统 一切都很顺利 当我安装 Wamp 时 我发现 localhost 根本不工作 我刚刚看到这个错误 连接失败 Fir
  • 如何在 Pi 的 C# 程序中将小数精确到 n 位

    对于这个问题Pi in C https stackoverflow com questions 39395 how do i calculate pi in c 我编写了下面的代码 并给出了最后 6 位数字为 0 的输出 所以我想通过将所有
  • 在本期末降级 Stripe 订阅?

    如何将正在进行的订阅降级为价格较低的计划 在当前订阅期结束当天 不使用 webhooks 我正在寻找使用 API 文档的独立于语言的解决方案 设想 当前计划 100 美元 月 下一个发票日期 下个月 1 日所需计划 50 美元 月 应于下个
  • Spyne Soap 服务器的限定元素/属性形式和非限定形式

    有没有办法将 elementFormDefault unqualified 服务器架构类型与 Spyne 服务器一起使用 现在我的所有试验都以方法响应结果结束
  • cobertura-maven-plugin 排除配置

    我有一个带有测试用例的 Maven 项目DefaultViewTypeToFragmentMapperTest java在目录中 src test java test com mycompany myproduct android view
  • 用于 C++ 回调的 C# 委托

    我想我已经基本上理解了如何编写用于回调的 C 委托 但是这个让我感到困惑 C 的定义如下 typedef int stdcall Callback long lCode long lParamSize void pParam 我的 C 方法
  • AWAIT_TIME 在 Azure 分析器中到底意味着什么?

    我正在查看最慢请求之一的性能概况 我看到 AWAIT TIME 超过 6 秒 但我无法获得有关它的更多信息 我如何弄清楚进程到底在 等待 什么 From Azure 的文档 https learn microsoft com en us a
  • XTestFakeButtonEvent 和 XSendEvent 之间的区别

    我正在尝试通过 x11 为 ubuntu 编写简单的鼠标点击器 首先 我编写了单击过程的第一个变体 基于 XSendEvent include
  • 如何对数据框中的多个时间序列进行多个静态测试

    我有以下 df head vardata Month repo Callrate WPI GDP FED nse usd 1 2001 04 01 9 00 7 49 5 41 4 6 4 50 1125 2 46 79 2 2001 05
  • python qt:自动调整主窗口大小以适应内容

    我有一个主窗口 其中包含一个主小部件 并为其设置了垂直布局 在布局中添加了一个QTableWidget仅 暂时 当我启动应用程序并在 main window 上调用 show 时 只有部分内容QTableWidget显示 我可以手动扩展窗口
  • 制作一行高的空div

    是否可以创建一个规则来生成以下 HTML div style width 100 div 只使用 CSS 的一行高度 或者我需要把 nbsp 作为内容 一些可能性 Set height https developer mozilla org
  • 为什么C#编译器会产生方法调用来调用IL中的BaseClass方法

    假设我们有以下 C 示例代码 class BaseClass public virtual void HelloWorld Console WriteLine Hello Tarik class DerivedClass BaseClass
  • 使用 swift 进行部分卷页动画

    我正在寻找一种方法来指示 uiview 上的 pagecurl 动画 以向用户提示他可以滚动某些页面 它应该是某种部分卷页 问题是我不知道该怎么做 我找到了一些教程 但仅适用于 Objective C 我不知道如何将其转移到 swift 中
  • NestJS:如何在自定义验证器中访问 Body 和 Param?

    我有一个场景 我需要来自两个值的值param and body执行自定义验证 例如 我有一条路线 photoId tag为照片添加标签 然而 在向照片添加标签之前 它必须验证是否已经存在与照片同名的标签 我的控制器中有以下路线 Post p
  • 了解执行 Google 数据存储区查询时出现的“CancellationException:任务已取消”错误

    我正在使用 Google App Engine v 1 9 48 在一些数据存储查询期间 我随机收到 CancellationException 任务已取消 错误 而且我不太确定到底是什么导致了这个错误 从other https stack
  • Dapper 和 SQL 注入

    Dapper 如何帮助防止 SQL 注入 我正在测试不同的 DAL 技术 必须选择一种来确保我们网站的安全 我倾向于 Dapper http code google com p dapper dot net 但需要一些帮助来了解安全性 Da
  • 替换 javascript 中的 JSON 键

    假设我有一个 JSON 对象 例如 var myjson com mycompany top Element com mycompany top count 10 com mycompany top size 0 我想用冒号替换键中的点 句
  • F3 更改 css 文件的相对 URi

    我是一个尝试 F3 的新手 我的示例应用程序基本上可以工作 但是对 css 文件的引用发生了更改并导致找不到 它看起来像 htaccess 问题 但我似乎无法修复它 我的 css 文件指定为 我的 htaccess 文件看起来像 Rewri
  • 为什么 UITextView 在调整大小后会在错误的框架中绘制文本?

    我陷入了某种魔力 当我尝试更改 UITextView 框架 在本例中使用 UISlider 时 文本会在比框架更小的其他区域中绘制 多次调整大小 有趣的是 如果我们在尝试使框架变大时滑动得足够快 文本就会绘制在非常正确的区域中 有人可以解释
  • 动态大小类型总是在堆上吗?

    我对 Rust 的学习让我了解了动态大小类型 DST 并且我知道这些类型的大小在编译时无法得知 例如 str 我现在的问题是 我说 DST 永远不能存在于堆栈上 它们只存在于堆上 这样说对吗 另外 另一方面 说大小类型可以存在于堆栈中是否正