From 389ce0e6af49bf16861e84a5006c88561e6a3b7f Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Fri, 11 Sep 2026 20:53:42 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20PermEntry=20=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E9=92=89=E6=94=B9=20repr(C)=E2=80=94=E2=80=94=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=BA=8F=EF=BC=88=E6=8C=87=E9=92=88,=20=E9=95=BF?= =?UTF-8?q?=E5=BA=A6=EF=BC=89=E8=BF=9E=E7=BB=AD=2016B=20=E7=94=B1=20repr(C?= =?UTF-8?q?)=20=E4=BF=9D=E8=AF=81=EF=BC=88=E9=9D=9E=20pack=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E5=B0=BA=E5=AF=B8=E6=96=AD=E8=A8=80=E5=8D=B3=20ABI=20?= =?UTF-8?q?=E9=92=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_kernel/src/string_forge.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/oxide_kernel/src/string_forge.rs b/crates/oxide_kernel/src/string_forge.rs index f2d6df9f..bbe9813e 100644 --- a/crates/oxide_kernel/src/string_forge.rs +++ b/crates/oxide_kernel/src/string_forge.rs @@ -18,12 +18,15 @@ fn hash64(s: &str) -> u64 { /// 一条 intern 过的键。`data` 是泄漏的 `&'static str`——永久键从不释放 /// (按设计 append-only),所以泄漏即存储模型,而非 bug。键 id 与 64 位 /// 哈希经 `DashMap` 的哈希键→候选 id 表寻址,条目自身不存哈希。 +/// `#[repr(C)]` 把布局钉为连续(指针, 长度):字段序与对齐由 repr(C) +/// 保证(非 pack 保证),16B 由下方尺寸断言钉死。 +#[repr(C)] #[derive(Clone, Copy)] struct PermEntry { data: &'static str, } -// 布局钉:条目仅泄漏指针 + 长度(16B);布局漂移即编译失败。 +// 布局钉:repr(C) 保证连续 16B;布局漂移即编译失败。 const _: () = assert!(std::mem::size_of::() == 16); /// 所有 VM 共享的 append-only、永不移动、读无锁的键 interner。