rust - 如何在 rust 中连接静态数组?
问题描述
我有两个静态数组,u8
我会实现一个函数来连接它们。类似的东西
fn concat_u8(first: &'static [u8], second: &'static [u8]) -> &'static [u8] {
&[&first[..], &second[..]].concat()
}
编译器向我显示错误returns a reference to data owned by the current function
。那是因为分配的内存将在函数结束时释放。
我怎样才能“强制”生命是静态的?
编辑
我有一个长期运行的过程。
在开始时,该过程处理一些输入以计算结果(即concat_u8
函数)。结果是一个数组,u8
并将在进程的剩余生命周期中以只读方式使用。在“内部事件”concat_u8
之后无法调用该函数。start
我不想使用Box
,因为动态分配意味着一点开销(可能无法测量?)并将结果存储为&[u8]
.
我有机会这样做吗?
我有机会在不使用unsafe
块的情况下做到这一点吗?
解决方案
在不泄漏内存的情况下,不可能将两个切片连接到具有静态生命周期的新切片。
切片连续存储在内存中。连接两个具有静态生命周期的切片需要将它们复制到新分配的内存中,因为结果也需要是连续的。这个新分配的内存必然归当前函数所有,所以你不能返回对它的引用。
您将不得不将内存的所有权转移回调用者:
pub fn concat_u8(first: &[u8], second: &[u8]) -> Vec<u8> {
[first, second].concat()
}
不再需要要求输入具有静态生命周期,并且可能根本不需要实现这个函数,因为调用它不会比简单地内联代码更短或更清晰。
推荐阅读
- python - 如何在 django 中扩展 UserCreationForm 中的字段?
- python - 生成 cookie sessionid 时的 DRF
- cuda - cuda驱动程序的指令执行顺序
- html - 如何避免html输入中的负数?
- mysql - MySQL)如何删除使用 WHILE 循环的重复行?
- dc.js - 条形图显示线条(细条)而不是条 [已解决]
- java - 如何在 Android 内部保存流式传感器数据?
- java - 如何使用 Spring Integration 在 IntegrationFlow 链中通过 SFTP 上传文件?
- python - 在 Windows 上,导入 CV2 时 DLL 加载失败:找不到指定的模块
- python - 部署 Django 应用程序(Apache、Passenger、Virtualenv)