为什么SWIG需要辅助函数来处理数组?

时间:2011-06-27 14:26:31

标签: perl swig

引自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表示   清楚地介绍了大量记忆   和性能开销。相反,   操纵指向这些数组的指针   简单而有效。

但我不太明白为什么这是错的,有人可以更详细地说明一下吗?

1 个答案:

答案 0 :(得分:1)

C数组与Perl数组非常不同。 Perl数组实际上是一个C结构与一些malloc ed内存相结合。您不能简单地将Perl数组用作C数组。因此需要将Perl数组转换为C数组,然后再将其转换回来。这不一定是直截了当的。因此,swig强制您编写代码来执行此操作。这就是辅助函数的作用。