You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

RustFFI返回Vec<f64>到Python并释放指针

  1. 首先,我们需要在Rust中定义一个可以导出为C函数函数,返回值为指向f64的指针,其长度为Vec中的元素数量。代码示例如下:
#[no_mangle]
pub extern "C" fn rust_exported_function() -> *mut f64 {
    let mut vec = Vec::new();
    // 此处添加需要导出的f64数据到Vec中
    let ptr = vec.as_mut_ptr();
    std::mem::forget(vec);
    ptr
}
  1. 在Python中,使用ctypes库来连接我们在Rust中定义的C函数,并将其调用结果转换为Python的List对象。代码示例如下:
import ctypes

# 加载Rust编译出来的.so文件
rust_lib = ctypes.CDLL('/path/to/rust_lib.so')

# 定义返回类型
rust_lib.rust_exported_function.restype = ctypes.POINTER(ctypes.c_double)

# 调用Rust导出的函数,获得指向f64数组的指针
rust_ptr = rust_lib.rust_exported_function()

# 构造Python列表并填充数据
rust_data = []
for i in range(0, num_elements):
    rust_data.append(rust_ptr[i])

# 释放Rust分配的内存
rust_lib.rust_exported_function_free(rust_ptr)

# 返回Python列表
return rust_data
  1. 在Rust中,我们需要定义一个函数来释放我们在导出函数中移交所有权的Vec的内存。这个函数将会被Python使用。代码示例如下:
#[no_mangle]
pub extern "C" fn rust_exported_function_free(ptr: *mut f64, len: usize) {
    unsafe {
        let _ = Vec::from_raw_parts(ptr, len, len);
    }
}
  1. 在Python中,我们需要使用ctypes库再定义一个函数,将该函数导出为C函数,以便在Rust中释放内存。代码示例如下:
import ctypes

# 加载Rust编译出来的.so文件
rust_lib = ctypes.CDLL('/path/to/rust_lib.so')

# 定义参数类型
rust_lib.rust_exported_function_free.argtypes = [
    ctypes.POINTER(ctypes.c_double),
    ctypes.c_size_t,
]

# 导出Python函数
@ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.c_double), ctypes.c_size
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

干货|数据湖储存如何基于 Apache Hudi落地企业基建

MetaServer 会根据 Client 传递的 Predicate 返回下推后的分区,Relation 会获取本次需要读取的所有文件信息,MetaServer 就会响应这次请求,获取当前最新的 Snapshot,封装成 File Status 返回,最后由 Compute Engine... =&rk3s=8031ce6d&x-expires=1716049251&x-signature=OBByJnsPCFtMVwH6VeC0Nk7diL4%3D)](http://mp.weixin.qq.com/s?__biz=MzkwMzMwOTQwMg==&mid=2247494934&idx=1&sn=a2ec963876864a60d0c559229c2c1e69&chksm=c09a...

「语聚AI」内测邀请中——ChatGPT插件市场的替代方案

[picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/ce6addcd90364b75b988134909866088~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1716135627&x-signature=fItffiash... (https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/7db551f641244eae94240f64a7fd214f~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1716135627&x-signature=LuVjUFs7vzNi0EY3H9CFr4JO...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

RustFFI返回Vec<f64>到Python并释放指针 -优选内容

干货|数据湖储存如何基于 Apache Hudi落地企业基建
MetaServer 会根据 Client 传递的 Predicate 返回下推后的分区,Relation 会获取本次需要读取的所有文件信息,MetaServer 就会响应这次请求,获取当前最新的 Snapshot,封装成 File Status 返回,最后由 Compute Engine... =&rk3s=8031ce6d&x-expires=1716049251&x-signature=OBByJnsPCFtMVwH6VeC0Nk7diL4%3D)](http://mp.weixin.qq.com/s?__biz=MzkwMzMwOTQwMg==&mid=2247494934&idx=1&sn=a2ec963876864a60d0c559229c2c1e69&chksm=c09a...
「语聚AI」内测邀请中——ChatGPT插件市场的替代方案
[picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/ce6addcd90364b75b988134909866088~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1716135627&x-signature=fItffiash... (https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/7db551f641244eae94240f64a7fd214f~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1716135627&x-signature=LuVjUFs7vzNi0EY3H9CFr4JO...

RustFFI返回Vec<f64>到Python并释放指针 -相关内容

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询