gpt4 book ai didi

rust - 如何检查我的内存分配是否正确?

转载 作者:行者123 更新时间:2023-12-03 11:29:35 25 4
gpt4 key购买 nike

我正在尝试使用 alloc 进行我自己的内存分配箱。我实现它的方式,如果我理解布局是如何工作的,下面的行应该得到我想以字节为单位分配的大小作为第一个参数,以及一个四舍五入的值作为第二个参数。所以在我的例子中,我想分配 20 个字节,因为我传递了那个值,所以它会被四舍五入到 4096。然后 alloc 将分配该内存并返回一个指向我的分配开始的指针。

let pr = alloc(Layout::from_size_align(20, 4096).unwrap());
我对功能的理解是否正确?另外,有没有办法检查指定的字节数是否已分配?

最佳答案

对齐不是四舍五入分配的大小。相反,它与指向分配开始的指针的整数值有关,因为该指针必须是对齐的倍数。

let pr = alloc(Layout::from_size_align(size, align).unwrap());
assert!(pr as usize % align == 0);
如果要将分配的大小四舍五入为 4096 的下一个倍数,可以执行以下操作:
let rounded_size = (size + 4095) / 4096;
如果您要求 20 字节的大小,则您的分配将只有 20 字节大,如果您想要 4096 字节的分配,则应分配 4096 字节。

在为您的数据选择对齐方式时,您应该考虑将在分配中存储哪些类型。这是因为某些类型需要某个最小对齐,例如 u32必须有至少 4 的对齐。
如果您在内存中存储的只是 u8字节,那么 1 对齐就可以了。如果您需要存储 u16 ,你需要对齐为2。如果你需要存储一个 u32你需要 4 和 u64需要 8. 如果您有多个,则应选择其中一种类型所需的最大对齐方式,例如如果您存储 u8 , u32u64 s 在数据中,选择对齐方式 8.
您可以使用 align_of 计算类型的最小允许对齐方式。 .

关于rust - 如何检查我的内存分配是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65459338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com