例如,CInt vs Int# vs. CInt# 之间的关系是什么?

例如,如果我调用一个返回 CInt 的外部函数,它是否已经是一个 CInt# 构造(即,它是堆栈上的原始 int ,而不是指向包含 int 的堆上某物的指针)?

在这种情况下, CIntInt# 之间有什么区别?

如果我想尽可能地提高性能,那么应该使用 CIntInt# 以及 CInt# 中的哪一个?

最佳答案

我不认为有 CInt# 这样的东西。

  • CInt 只是一个自定义类型,它保证可以很好地与 C 配合使用(请参阅 the blurb at the top of this page 了解更正式的内容)。它是盒装的,因此您会因此而受到性能影响。
  • Int# 是一个“神奇”的未装箱整数。事实证明,它是 does play well with the FFi ,所以如果你想要每一点性能,就使用它。
  • 关于haskell - Haskell 中的外部类型与未装箱的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41448940/

    10-12 19:17