.NET是否保证.NET字节数组始终正确对齐?我确实需要这个来处理例如x64中的不安全上下文中的字节数组,以修改具有本机寄存器大小的数据块.
但到目前为止,我还没有找到任何CLR确实给我任何保证我的内存访问正确对齐的文档.
不.实际上,阵列可能会因x86抖动而错位.特别是double []和long []的问题,垃圾收集器只提供了它们将在4对齐的保证.这解释了double []的特殊规则,这样的数组将在大对象堆中分配时有1000个或更多元素.远低于LOH分配的正常规则,85000或更多字节.LOH依赖于Windows堆对齐保证,对齐为8.这在x64抖动中不是问题.
更具体地解决您的问题:字节数组永远不会成为问题.无论数组从何处开始,一个字节始终是对齐的.使用Microsoft编译器编译的非托管代码中的"long"也不是问题,它是4个字节,因此始终与默认的GC对齐规则愉快地对齐.在x64模式下它仍然是4个字节,所以也没有问题.
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |