Scala Native:如何将Int转换为Ptr[CInt]?
在Scala Native中将JVM Int转换为非托管Ptr[CInt]的方法
要将JVM中的Int转换为scala.scalanative.unsafe.Ptr[CInt],你需要先分配一块非托管内存,再将Int值写入这块内存中——因为指针本身指向的是内存地址,而非直接持有值。具体操作如下:
- 导入Scala Native Unsafe包的核心工具:
import scala.scalanative.unsafe._ import scala.scalanative.libc.stdlib._ // 用于手动释放内存
- 分配非托管内存并写入Int值:
val num: Int = 5 // 分配一块能容纳CInt类型的非托管内存,返回对应指针 val nativeInt: Ptr[CInt] = alloc[CInt] // 将JVM Int值写入指针指向的内存地址,JVM Int可隐式转换为CInt store(nativeInt, num)
- (关键)使用完非托管内存后必须手动释放,避免内存泄漏:
free(nativeInt)
补充说明
alloc[T]会在堆外分配对应类型T的非托管内存,返回指向该内存的指针store(ptr, value)负责将目标值写入指针指向的内存地址- JVM的
Int与Scala Native的CInt类型兼容,可直接隐式转换,也可显式调用num.toCInt明确转换
内容的提问来源于stack exchange,提问作者R A
相关产品推荐
相关产品推荐

