You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raku NativeCall调用Rust FFI时CArray过长触发段错误求助

Dan::Polars模块CArray传参段错误问题

问题背景

  • 开发中的Raku模块Dan::Polars首轮压力测试、基准测试阶段,出现CArray传参触发段错误问题,已提供最小可复现样例。

运行环境

  • 操作系统:Ubuntu
  • Raku版本:Rakudo™ v2022.04,实现Raku® Programming Language v6.d标准
  • 底层虚拟机:MoarVM 2022.04
  • 复现环境:可使用p6steve/raku-dan:polars-2022.02镜像(支持arm64/amd64架构)复现,首次运行需执行cargo build完成Rust动态库编译。

复现代码结构

Rust侧实现

  • 代码编译产出动态库libmre.so
  • 定义存储String类型的VecC结构体,实现初始化、打印方法
  • 通过extern "C"导出两个C兼容接口:
    • ve_new_str:入参为C风格字符串数组指针、数组长度,返回堆分配的VecC结构体指针
    • ve_show:入参为VecC结构体指针,打印内部存储的向量内容
  • 配套提供对应Cargo.toml编译配置

Raku侧实现

  • 通过NativeCall加载编译生成的动态库
  • 封装VecC类
  • 编写carray函数生成CArray[Str]类型数组,传入Rust侧暴露的接口
  • 已尝试将CArray变量声明提升至外层作用域,避免对象被GC提前回收,该方案未解决问题

故障现象

  • 传入数组长度 N < 30 时,程序可正常运行并输出数组内容
  • 传入数组长度 N > 50 时,程序直接抛出Segmentation fault (core dumped)段错误
  • 故障触发的长度阈值落在N=30到N=100区间

诉求

  • 定位段错误根因,给出可落地的解决方案
  • 方案需支持后续基准测试 N=2e9 规模的参数传递需求

内容的提问来源于stack exchange,提问作者librasteve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:03:18