gpt4 book ai didi

.net - 如何获取数组中元素的大小?

转载 作者:行者123 更新时间:2023-12-02 08:09:48 24 4
gpt4 key购买 nike

我正在尝试追踪一个内存损坏错误,并且我设法完成了大部分工作。事实证明,ManagedCuda 的 CudaDeviceVariable 类为每个 bool 元素分配了 4 个字节,而我强烈怀疑 F# 的 native 数组每个 bool 只占用 1 个字节元素。 CopyToHost 函数假定源和目标的大小相同,这导致它写入数组末尾。

我希望编译器告诉我 F# 的 bool [] 实际上是每个元素 1 个字节,所以我会得到最终证明并用它来替换错误的 ManagedCuda 计算大小的库函数。

那怎么可能呢?

最佳答案

通过在运行时比较相邻数组元素的实际地址,您可以获得 bool 数组元素分配大小的可靠指示:

open System.Runtime.InteropServices

let boolarray = Array.zeroCreate<bool> 2

let elemSize = Marshal.UnsafeAddrOfPinnedArrayElement(boolarray,1) -
Marshal.UnsafeAddrOfPinnedArrayElement(boolarray,0)

在 fsi 中计算为

val a : bool [] = [|false; false|]
val elemSize : nativeint = 1n

这有效地表明在我的系统上没有填充的情况下为每个元素分配了 1 个字节。

关于.net - 如何获取数组中元素的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48337774/

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