#alignment #aligned #align #alloc #allocator

已删除 aligned_alloc

提供跨平台的对齐内存分配原语

使用旧的 Rust 2015

0.1.3 2017年1月28日
0.1.2 2016年1月24日
0.1.1 2015年10月14日
0.1.0 2015年10月14日

#21 in #aligned

Download history 93/week @ 2024-03-03 93/week @ 2024-03-10 116/week @ 2024-03-17 120/week @ 2024-03-24 124/week @ 2024-03-31 89/week @ 2024-04-07 113/week @ 2024-04-14 119/week @ 2024-04-21 108/week @ 2024-04-28 114/week @ 2024-05-05 107/week @ 2024-05-12 107/week @ 2024-05-19 109/week @ 2024-05-26 112/week @ 2024-06-02 67/week @ 2024-06-09 92/week @ 2024-06-16

394 个月下载量
8 个crate中使用了(3 个直接使用)

Apache-2.0/MIT

9KB
127 代码行

Rust 的对齐内存分配

Linux / OS X Windows
Build Status Build status

此crate提供跨平台的请求特定对齐分配的原语。它**不是**作为通用分配器API(如alloc::heap)使用,但可用于具有特定对齐要求的偶发大分配。

例如,某些区域分配器可以通过对地址位进行掩码来找到分配对象所在的区域,如果区域对其大小进行了对齐。

在Unix上,此crate使用posix_memalign函数。在Windows上,稍微复杂一些:我们使用VirtualAlloc来保留足够大的地址空间,以容纳分配加对齐(实际上没有分配内存),然后在保留的空间内计算对齐地址,使用VirtualFree撤销保留(为对齐保留的额外内存位不会浪费),然后再次使用VirtualAlloc,这次传递对齐指针并实际分配内存而不是只是保留地址空间。

用法

如通常一样,在您的 Cargo.toml

[dependencies]
aligned_alloc = "0.1"

并在您的 lib.rsbin.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