引自here:
理想情况下,用户可能想要传递 Perl数组作为参数如下:
@a = (10,20,30,40);
@b = (50,70,60,200);
gd::plotpts($im,\@a,\@b,4,1); # Error!
但是,此脚本会生成一个类型 错误而不是像一个人那样行事 期望。虽然看起来像这样的行为 限制性或离奇,SWIG已经 故意设计在经营 这种方式。事实上,甚至有 这种方法的好处。如果Perl 数组用作C数组,a 将进行复制,验证 类型正确,并取消分配 每次将数组传递给C时 功能。对于大型阵列,这会 引入了实质性的表现 高架。空间要求也是 关注一些C程序。对于 例如,数字应用可能 操纵数百万的数组 元素。将此类数组转换为 并从Perl表示 清楚地介绍了大量记忆 和性能开销。相反, 操纵指向这些数组的指针 简单而有效。
但我不太明白为什么这是错的,有人可以更详细地说明一下吗?
答案 0 :(得分:1)
C数组与Perl数组非常不同。 Perl数组实际上是一个C结构与一些malloc
ed内存相结合。您不能简单地将Perl数组用作C数组。因此需要将Perl数组转换为C数组,然后再将其转换回来。这不一定是直截了当的。因此,swig强制您编写代码来执行此操作。这就是辅助函数的作用。