Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
545ef9d8
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
545ef9d8
编写于
3月 07, 2020
作者:
T
Tim Diekmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add `Layout::dangling()` to return a well-aligned `NonNull<u8>`
上级
2890b37b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
16 addition
and
0 deletion
+16
-0
src/libcore/alloc.rs
src/libcore/alloc.rs
+12
-0
src/libcore/tests/alloc.rs
src/libcore/tests/alloc.rs
+3
-0
src/libcore/tests/lib.rs
src/libcore/tests/lib.rs
+1
-0
未找到文件。
src/libcore/alloc.rs
浏览文件 @
545ef9d8
...
...
@@ -140,6 +140,18 @@ pub fn for_value<T: ?Sized>(t: &T) -> Self {
unsafe
{
Layout
::
from_size_align_unchecked
(
size
,
align
)
}
}
/// Creates a `NonNull` that is dangling, but well-aligned for this Layout.
///
/// Note that the pointer value may potentially represent a valid pointer to
/// a `T`, which means this must not be used as a "not yet initialized"
/// sentinel value. Types that lazily allocate must track initialization by
/// some other means.
#[unstable(feature
=
"alloc_layout_extra"
,
issue
=
"55724"
)]
pub
const
fn
dangling
(
&
self
)
->
NonNull
<
u8
>
{
// align is non-zero and a power of two
unsafe
{
NonNull
::
new_unchecked
(
self
.align
()
as
*
mut
u8
)
}
}
/// Creates a layout describing the record that can hold a value
/// of the same layout as `self`, but that also is aligned to
/// alignment `align` (measured in bytes).
...
...
src/libcore/tests/alloc.rs
浏览文件 @
545ef9d8
use
core
::
alloc
::
Layout
;
use
core
::
ptr
::
NonNull
;
#[test]
fn
const_unchecked_layout
()
{
const
SIZE
:
usize
=
0x2000
;
const
ALIGN
:
usize
=
0x1000
;
const
LAYOUT
:
Layout
=
unsafe
{
Layout
::
from_size_align_unchecked
(
SIZE
,
ALIGN
)
};
const
DANGLING
:
NonNull
<
u8
>
=
LAYOUT
.dangling
();
assert_eq!
(
LAYOUT
.size
(),
SIZE
);
assert_eq!
(
LAYOUT
.align
(),
ALIGN
);
assert_eq!
(
Some
(
DANGLING
),
NonNull
::
new
(
ALIGN
as
*
mut
u8
));
}
src/libcore/tests/lib.rs
浏览文件 @
545ef9d8
#![feature(alloc_layout_extra)]
#![feature(bool_to_option)]
#![feature(bound_cloned)]
#![feature(box_syntax)]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录