使用旧的 Rust 2015
0.1.3 |
|
---|---|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#21 in #aligned
394 个月下载量
在 8 个crate中使用了(3 个直接使用)
9KB
127 代码行
Rust 的对齐内存分配
Linux / OS X | Windows |
---|---|
此crate提供跨平台的请求特定对齐分配的原语。它**不是**作为通用分配器API(如alloc::heap
)使用,但可用于具有特定对齐要求的偶发大分配。
例如,某些区域分配器可以通过对地址位进行掩码来找到分配对象所在的区域,如果区域对其大小进行了对齐。
在Unix上,此crate使用posix_memalign
函数。在Windows上,稍微复杂一些:我们使用VirtualAlloc
来保留足够大的地址空间,以容纳分配加对齐(实际上没有分配内存),然后在保留的空间内计算对齐地址,使用VirtualFree
撤销保留(为对齐保留的额外内存位不会浪费),然后再次使用VirtualAlloc
,这次传递对齐指针并实际分配内存而不是只是保留地址空间。
用法
如通常一样,在您的 Cargo.toml
[dependencies]
aligned_alloc = "0.1"
并在您的 lib.rs
或 bin.rs
extern crate aligned_alloc;
API
API很简单,只有两个方法
fn aligned_alloc(size: usize, align: usize) -> *mut ()
分配大小为size
字节,对齐为align
字节的内存。分配失败时返回空指针。
返回的指针必须使用aligned_free
进行释放。
注意:此函数旨在用于偶发大分配(因为malloc
已经为所有本地数据类型保证了合适的对齐)并且当频繁使用时可能会非常慢。
参数
size
:分配的字节数。align
:分配的对齐(至少是当前平台usize
的大小)。还必须是2的幂。
unsafe fn aligned_free(ptr: *mut ())
释放使用aligned_alloc
分配的对齐内存。不安全,因为用未使用aligned_alloc
(或已释放)分配的指针调用此函数会导致未定义的行为。
依赖项
~115KB