如何在 Rust 中声明公共静态指针? [复制]

2024-01-03

我只是想声明一个指向由我的项目的多个组件共享的包中的结构的指针,但使用相同的过程。我的意思是目标是只初始化一次。

type Box = [u64; 64];
pub static mut mmaped: &mut Box;

在编译时.

free static item without body

Where mmaped稍后通过以下方式仅从顶部 crate 分配一次值,并从它所依赖的多个 crate 中使用它的值。

mmaped = unsafe { std::mem::transmute(addr) };

那么我如何提供一个定义mmaped无需mmap不止一次吗?

这个问题不是重复的如何创建一个全局的、可变的单例? https://stackoverflow.com/q/27791532,因为它没有谈论将单例导出到板条箱之外,并且我专门为此而收到编译器错误。


Rust 编译器 (2018) 无法从您的代码生成有效的静态项,因为它缺少主体。您正在尝试声明静态变量mmaped但实际上并没有用任何值初始化它。所有静态变量都必须在编译时用一个值进行初始化。

std::mem::MaybeUninit似乎是这个用例的完美解决方案。使用“未初始化”值对其进行初始化。稍后用您的实际值更新它。由于它是静态的,因此不允许进一步初始化。

use std::mem::MaybeUninit;
type Box = [u64; 64];
pub static mut mmaped: MaybeUninit<Box> = MaybeUninit::uninit();

// later
unsafe {
    mmaped = MaybeUninit::new([0; 64]);
}

只需确保您不访问mmaped在实际初始化之前。

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

如何在 Rust 中声明公共静态指针? [复制] 的相关文章

  • 不接受 TableAdapter 中的参数

    我目前正在尝试设置我的 TableAdapters 但它不允许我使用参数 这使得它毫无用处 当我创建新查询时 SELECT users FROM users WHERE name LIKE name 它告诉我附近有一个 SQL 错误 我使用
  • 使用两个不同的泛型参数调用泛型函数仍然可以编译

    下面的代码怎么可能编译通过 据我所知 count 函数是用两种不同的类型调用的 但编译器并没有抱怨并愉快地编译了这段代码 public class Test public static
  • 在 g++ 中链接文件

    最近我尝试用g 在Ubuntu上 编译一个程序 通常我使用 Dev C 在 Windows 上 只要我创建一个项目并将所有必要的文件放入其中 它就可以正常工作 编译程序时出现的错误是 filename cpp undefined refer
  • 有没有办法以数组的形式访问结构体字段?

    我是 Rust 新手 正在尝试弄清楚这是否可行 因此 有时函数 方法以数组形式访问数据会更干净 有时按名称访问数据会更干净 在 Rust 中我可以定义这样的东西 struct Vector3D x f64 y f64 z f64 coord
  • SyntaxError:多个异常类型必须用括号括起来

    我是初学者 在使用 python 安装 pycaw 进行音频控制后遇到问题 在放置 pycaw 的基本初始化代码时 出现以下错误 Traceback most recent call last File c Users volumeCont
  • 何时使用 Box> 或 Vec>?

    什么时候设计一个嵌套的数据结构才有意义 Box and a Vec 或相反亦然 似乎在大多数情况下 您想在堆上存储多个固定大小的东西 Box是多余的 因为它唯一的 作用是堆分配一个 单个值 以及一个正常的Vec已经在堆上分配其存储空间 背景
  • 带填充零的十六进制格式

    将整数类型格式化为十六进制字符串时 我无法让它用零填充数字 println 4x 0x0001 as u16 gt 0x1 but expected 0x0001 println 02x 0x0001 as u16 gt 0x1 same
  • 如何在Qt中设置编译器?

    我对 Qt 完全陌生 我下载了离线版本 Qt 5 3 2 for Windows 64 bit VS 2013 OpenGL 573 MB 我无法编译我的项目 I have Qt Creator 3 2 1 开源 基于Qt 5 3 2 MS
  • 重复的 AssemblyVersion 属性

    我有一个项目在编译时生成以下错误 错误 CS0579 重复的 AssemblyVersion 属性 我已经检查过文件AssemblyInfo cs看起来那里没有重复 I found MSDN 上的这篇文章 http social msdn
  • serde/bincode 如何序列化字节数组?

    这段代码完全按照我的要求序列化了一个 32 字节的数组 derive Debug Clone Serialize Deserialize PartialEq Eq PartialOrd Ord struct Hash u8 32 let h
  • 为什么 Rust 在运行时检查数组边界,而(大多数)其他检查发生在编译时?

    正在阅读基本介绍 http doc rust lang org book arrays vectors and slices html 如果您尝试使用不在数组中的下标 您将收到错误 数组访问在运行时进行边界检查 为什么 Rust 在运行时检
  • Diesel:添加子查询的结果

    给出下表 accounts id INTEGER opening balance INTEGER transactions debit INTEGER credit INTEGER amount INTEGER foreign key de
  • 2D 中的大量旋转

    我正在尝试使用 Bevy 0 3 并且我可以轻松使用内置转换Camera2dComponents default 这是自上而下的二维 问题在于尝试将玩家的旋转与鼠标同步 for event in evreader iter cursor m
  • 膨胀类 android.support.design.internal.BottomNavigationView 时出错

    我正在制作我的第一个应用程序 这是一个简单的应用程序 带有启动屏幕和主要活动 现在我有两个构建变体 免费版本 活动底部有 Admob 横幅 付费版本 该应用程序不会在底部显示 admob 横幅 而是将其替换为用于切换活动的底部导航视图 我将
  • 如何根据原始元素将向量中的元素替换为另一个元素[重复]

    这个问题在这里已经有答案了 请考虑以下程序 这是一个最小化的示例 所以不要纠结于我在这里尝试做的事情可以通过以下方式更好地实现 HashMap
  • 未定义条件编译符号

    我无法让 Visual Studio 按照我的预期运行 我创建了 2 个配置文件 一个定义了符号 FOO 另一个定义了符号 BAR 我有这个代码 static class MyClass if FOO public static strin
  • rvm编译安装ruby 2.5.0出错

    我正在尝试使用 rvm 安装 ruby 2 5 0 但出现错误 我在 Ubuntu 18 16 和现在的 Linux Mint Cinnamon 上尝试过 基本上我在运行安装 ruby 的代码之前所做的是 打开 GPG 密钥https rv
  • xcode“将源编译为”覆盖特定文件

    我有一个项目 必须将 编译源为 值设置为 Objective C 不 根据文件类型 在我的主项目中不起作用 我从框架 特别是 OpenFeint 获得的文件有问题 该文件在编译为 Objective C 时出现编译错误 error poin
  • 如何在 TypeScript 中禁用/抑制库中的错误?

    我打开了一些编译器开关来报告代码中的更多问题 例如严格的空检查 但我在使用的库中遇到了数十个错误 例如 default xxx node modules angular core src util decorators d ts 11 5
  • 如何消除 Rust 中特征的歧义?

    我想使用write fmt两种不同类型的对象上的方法 use std fmt Write use std io Write fn main let mut a String new let mut b std fs File create

随机推荐

  • Delphi 2010-IDE 不断停止在 CPU 调试窗口

    我在 D2010 IDE 中不断出现 CPU 调试窗口 我注意到这出现在一些断点上 而其他一些断点则不会导致这种效果 无法解释这种情况到底何时发生或哪些断点导致这种情况 但似乎当调试器无法到达代码上的断点时 它会停止在方法的开始地址上 并且
  • 在 jar 中包含属性/配置文件是一种不好的做法吗?

    例如 MyApp 是一个 Web 应用程序 其中包含一个属性文件 server properties 该文件描述应用程序的配置数据 例如服务器名称 在开发阶段 server properties 位于其自己的 IDE 项目文件夹中 它的逻辑
  • 当终端关闭时终止 sudo python 脚本

    如何判断运行 python 脚本的终端是否已关闭 如果用户关闭终端 我想安全地结束我的 python 脚本 我可以使用处理程序捕获 SIGHUP 但当脚本作为 sudo 运行时则不行 当我使用 sudo 启动脚本并关闭终端时 python
  • 模拟内存不足警告不起作用

    我有一个UIWebView in a UIViewController 我正在尝试将此视图控制器推送到现有的UINavigationController 它有另一个视图控制器 它也有一个UIWebView在里面 推动第一个视图控制器后 我尝
  • 单击时切换 CSS3 动画

    在没有 JavaScript 的情况下 在点击时改变 CSS3 动画方向的最佳方法是什么 我最近一直在探索复选框黑客 并试图找到一种方法 只使用一组关键帧 而不是两组 一个前进 一个返回 这可能吗 或者有没有办法用一套来做到这一点 例如我有
  • 如何删除mysql数据库中的重复记录?

    使用rails或mysql查询删除mysql数据库中重复记录的最佳方法是什么 您可以通过以下方式将不同的记录复制到新表中 select distinct into NewTable from MyTable
  • 如何使用 Gradle 运行多个命名测试?

    我知道怎么说 gradle test tests mypackage MyTest 但如何指定多个呢 gradle test tests mypackage MyTest mypackage model ModelTest BasicTes
  • 了解 Qt 中的表单布局机制

    Qt具有灵活且强大的布局机制来处理桌面应用程序窗口的视图 但它是如此灵活 以至于当出现问题并需要微调时 它几乎无法被理解 而且如此强大 以至于它可以击败任何试图压倒 Qt 关于表单外观的观点的人 那么 谁能解释一下 或者提供一下Qt的定位机
  • PDO 因记录过多、缓冲查询而失败

    这个脚本昨天运行良好 但是今天 由于我最初选择的表中现在有大约 150 000 条记录 所以它失败了 说我正在从 null 获取 据我所知 这是因为我的记录太多了 因此 我最终通过向初始查询 1000 添加限制和这一行来纠正它 MysqlC
  • Bash 中的文件名未正确打印,带有下划线“_”[重复]

    这个问题在这里已经有答案了 我正在用这个 DATE FOLDER date b d a G FILENAME HOME date1 tar gz echo BACKUP DESTINATION DATE FOLDER FOLDERNAME
  • Python 继承:何时以及为何使用 __init__

    我是一个Python新手 试图理解继承方法背后的哲学 逻辑 问题最终涉及为什么以及何时必须使用 init 子类中的方法 例子 看来从超类继承的子类不需要有自己的构造函数 init 方法 下面 狗继承了哺乳动物的属性 名字 年龄 和方法 发出
  • 产品密钥的正则表达式

    我正在尝试做一个正则表达式来显示所有具有该值的产品密钥 这是我创建的正则表达式 A Z0 9 5 A Z0 9 5 A Z0 9 5 A Z0 9 5 A Z0 9 5 由于某种原因它不起作用 您打算使用哪种正则表达式工具 grep egr
  • 无法登录活动管理。有什么办法可以创建管理员用户吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我尝试使用默认管理员用户登录时 我收到 无效的电子邮件或密码 有没有办法用代码创建用户并尝试以这种方式登录 我可以登录我的实时网站 但不
  • 像 Perl 一样在 JavaScript 正则表达式中嵌入注释

    有没有办法在 JavaScript 正则表达式中嵌入注释 例如你可以用 Perl 做 https stackoverflow com questions 632795 how do you comment a perl regular ex
  • WCF - 序列化继承类型

    我有这些课程 DataContract public class ErrorBase DataContract public class FileMissingError ErrorBase DataContract public clas
  • 如何找到上次访问数据库的时间?

    在 SQL Server 2005 中 您能否轻松确定某人上次查询数据库的时间 扩展詹姆斯 艾伦的答案 SELECT d name last user seek MAX last user seek last user scan MAX l
  • 在 C++ 中使用 RK-4 求解洛伦兹方程

    我用 C 编写了使用 RK 4 方法求解洛伦兹方程的代码 我必须绘制吸引子图 并且在使用 RK 4 方法求解 3 一阶耦合微分方程时遇到一些困难 这是我的代码 Solving 3 coupled first order differenti
  • 系统在哪里存储图标位置?

    任何文件夹上的 图标视图 和 文件夹视图 实际上都是 SysListView 如果取消选中 自动排列图标 您可以在图标周围移动 下次打开文件夹时 所有图标都将位于与上次相同的位置 我的问题是 系统在哪里存储图标的 x 和 y 位置 设置为桌
  • Angular 的控制器方法如何使 $scope 可用于我的函数参数

    我正在寻找伪代码答案或概念答案 经过多年的编程 我从未创建过接收函数参数的类方法 以便该方法的调用者自动访问 不可见 属性 如果我尝试在我的范围之外访问 scopemy app controller 方法 我收到一个错误 所以我知道它不是全
  • 如何在 Rust 中声明公共静态指针? [复制]

    这个问题在这里已经有答案了 我只是想声明一个指向由我的项目的多个组件共享的包中的结构的指针 但使用相同的过程 我的意思是目标是只初始化一次 type Box u64 64 pub static mut mmaped mut Box 在编译时