许多数组边界检查会降低速度,对于2D数组尤其如此。有没有办法在F#中编写不安全的代码块?
答案 0 :(得分:9)
我不是F#程序员,但据我所知,它似乎没有unsafe关键字。
通过将2D数组转换为一维数组,可以提高性能。
建议5:在我们做到这一点之前,我 会建议.NET用户做什么 许多C ++数值程序员都这样做: 写一个班来实现你的 n维数组。这将是 表示为一维数组, 和相关的访问者会 将n个索引转换为1个通过 适当的乘法。我们 几乎肯定不会消除 边界检查1-d数组, 但至少我们只做一次检查!
答案 1 :(得分:3)
有关让编译器为您删除边界检查的一些方法,请参阅here。基本上,您需要以编译器知道您的索引将在边界内的方式编写循环。如果它知道它将在边界内,那么当你在没有调试的情况下在发布模式下运行时,JIT编译器将为你删除边界检查。
答案 2 :(得分:2)
我没有用它来知道它是否适用,但是请查看NativePtr module。
答案 3 :(得分:1)
不在此版本中,我怀疑他们是否会添加它。