首页 文章

在Ada中创建C兼容无界字符串的最快方法是什么?

提问于
浏览
0

我正在为Windows创建一个Ada程序,它需要能够将字符串传递给用C编写的某些函数 . 到目前为止,我一直在使用 Unbounded_String 类型操作Ada中的字符串,然后在传递之前将数据转换为 Interfaces.C.char_array 到C函数 .

这工作正常,只有性能较慢,较旧的计算机上的一点问题 . 有时在字符串的略微修改版本上重复调用C函数,并且每次都需要将 Unbounded_String 转换为类似的 char_array . 字符串不会被C函数修改,因此只需将其转换为 char_array .

我曾想过将字符串存储在 char_array 中,并在每次操作字符串时从Ada类型转换 . 数据传递给C的次数比更改次数更多,因此可以提高性能 . 这种方法的问题在于,字符串的长度通常会发生变化,有时会发生很大变化,并且无法事先知道最大长度 .

理想的解决方案是使用类似于 Unbounded_String 的东西,只将字符串存储为 char_array . 通过这个我的意思是动态大小的东西,当旧数组不够大时分配一个新数组,它应该允许Ada Characters / Strings 插入(并且也被删除)到数组中,只将那些字符转换为C chars .

有没有(相对)简单,快速的方法,而不必自己实现它?或者在Ada中是否还有其他快速操作C兼容字符串的方法?在此先感谢您的任何建议 .

1 回答

  • 0

    你没有提到你希望你的类型有多少个对象,但我会假设我们并没有谈论这么多,以至于你将会耗尽可用的地址空间 .

    只需在私有记录中封装一个足够大的 char_array (比如最大预期大小的10倍),并创建操作它所需的操作 .

    如果你非常不走运,你可能需要告诉你的编译器/运行时环境你需要一个非常大的堆栈,但是在实际体验它时要省心 .

相关问题