gpt4 book ai didi

c# 在 8 字节边界上对齐 double

转载 作者:太空狗 更新时间:2023-10-30 01:33:50 24 4
gpt4 key购买 nike

这不是一个重复的问题。

在现代 Intel CPU 中,使用 x64 构建的 8 字节边界上的 double 可以在不锁定的情况下读/写,因为它保证是原子的。是否有装饰器,或者如何告诉 C# 编译器在 8 字节边界上对齐。

下面 [Align(8)] 装饰器的实际代码是什么?

public class AClass
{
[Align(8)]
private static double d1;
[Align(8)]
private static double d2
//and so on
}

最佳答案

您可以使用 [FieldOffset] attribute 将字段放置在任意偏移处.请注意该 MSDN 文章中的示例,需要 [StructLayout(LayoutKind.Explicit)]。

但这对你一点帮助都没有,double 的对齐已经是 8。你不能让它“更好”。最重要的是对象本身如何对齐。这取决于目标平台。

当您以 x86 为目标,从而获得 32 位机器代码时,您从 GC 堆和堆栈获得的对齐仅为 4。因此, double 未对齐的可能性为 50%。如果对象分配在大对象堆中,您只能做得更好,它与 8 对齐。这需要将对象存储在至少 85,000 字节的数组中。 double[] 数组的特殊规则,当它们至少有 1000 个元素时,它们会在 LOH 中分配。

如果您在 64 位操作系统上以 x64 为目标,通过简单地在项目的“属性”>“构建”选项卡中删除抖动强制并保留 AnyCPU 来实现,那么对象将保证与 8 对齐。这就是您应该始终追求的目标当操纵很多 double 时。

关于c# 在 8 字节边界上对齐 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32492832/

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