我正在为Windows创建一个Ada程序,需要能够将字符串传递给用C编写的某些函数。到目前为止,我一直在使用Unbounded_String
类型操作Ada中的字符串,然后转换为在将数据传递给C函数之前将数据传递给Interfaces.C.char_array
。
这样可以正常工作,只有性能较慢的旧计算机才会出现问题。有时在字符串的略微修改版本上重复调用C函数,并且每次都需要将Unbounded_String
转换为类似的char_array
。字符串不会被C函数修改,因此只需将其转换为char_array
。
我想过将字符串存储在char_array
中,并在每次操作字符串时从Ada类型转换。数据传递给C的次数比更改次数更多,因此可以提高性能。这种方法的问题在于,字符串的长度通常会发生变化,有时会发生很大变化,并且无法预先知道最大长度。
理想的解决方案是使用与Unbounded_String
类似的内容,仅将字符串存储为char_array
。我的意思是动态调整大小的东西,当旧数组不够大时分配一个新数组,它应该允许Ada Characters
/ Strings
插入(并且也被移除)到数组中,只将这些字符转换为C chars
。
有没有(相对)简单,快速的方法,而不必自己实现它?或者在Ada中是否还有其他快速操作C兼容字符串的方法?提前感谢任何建议。
答案 0 :(得分:0)
你没有提到你希望你的类型有多少个对象,但我会假设我们并没有谈论这么多,以至于你将会耗尽可用的地址空间。
只需在私有记录中封装一个足够大的char_array
(比如最大预期大小的10倍),并创建操作它所需的操作。
如果你非常不走运,你可能需要告诉你的编译器/运行时环境你需要一个非常大的堆栈,但是在实际体验它时要省心。