file-scope mutable static HashSet / Vec / etc

时间:2015-09-18 21:17:06

标签: rust ld-preload

我想创建C-linkage函数来通过LD_PRELOAD拦截我的程序调用,但我正在Rust中实现拦截函数。

我创建pub extern fn来拦截调用没有问题,但我想从程序的全局状态读取/写入某处,因为我无法改变我正在拦截接受的函数的签名元数据。我不需要堆分配,我可以使用一些大型静态初始化的HashSetVec条目池。但我确实需要能够在程序运行期间添加和删除集合的元素。

我认识到这种模式与许多Rust设计目标背道而驰,但它对我来说似乎是一个合法的用例。

我是Rust的新手,所以我希望有一个unsafe选项可以做到这一点。

如果查看代码示例很有用:

static mut foo Vec<c_int> = Vec::new();

...失败,因为您不能拥有需要析构函数的static存储,或者进行堆分配。并且lazy_static!不允许使用mut能力结构。

理想情况下,我更喜欢HashSet<c_int>。如果我不能让它工作,我想我可以尝试Vec::from_elem(100, 0)。这不太理想,因为我需要提名某种哨兵价值,但如果它有效,我想我会感到满意。

0 个答案:

没有答案