gpt4 book ai didi

.net - .NET 中的数组是否自然对齐?

转载 作者:行者123 更新时间:2023-12-04 14:14:55 25 4
gpt4 key购买 nike

.NET 是否保证 .NET 字节数组始终正确对齐?我确实需要这个来治疗,例如不安全上下文中的字节数组与 x64 中的 long 一样,用于修改具有 native 寄存器大小的数据块。

但到目前为止,我还没有找到任何文档表明 CLR 确实给了我任何保证我的内存访问然后正确对齐。

最佳答案

不。事实上,对于 x86 抖动,阵列可能会错位。特别是 double[] 和 long[] 的问题,垃圾收集器只保证它们会在 4 处对齐。这就解释了 double[] 的特殊规则,这样的数组在执行时会被分配到大对象堆中有 1000 个或更多元素。大大低于 LOH 分配的正常规则,85000 或更多字节。 LOH 取决于 Windows 堆对齐保证,在 8 处对齐。否则这在 x64 抖动中不是问题。

对您的问题更具体一点:字节数组永远不会成为问题。无论数组从哪里开始,字节总是对齐的。使用 Microsoft 编译器编译的非托管代码中的“长”也不是问题,它是 4 个字节,因此总是与默认的 GC 对齐规则很匹配。在 x64 模式下它仍然是 4 个字节,所以也没有问题。

关于.net - .NET 中的数组是否自然对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15501766/

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