我正在构建一个由两部分组成的应用程序:QtQuick GUI(C)和
Haskell后端使用
repa
和
accelerate
软件包处理图像.
我想在GUI中以交互方式显示图像.我不想复制数据,但使用某种共享内存或任何其他机制,这将使我获得最大的性能.
解决方法
我不确定Haskell但是在lablqt(我的库用于构建QtQuick OCaml应用程序,http://kakadu.github.io/lablqt/)我会尝试这种方法:
>我们将图像存储在OCaml / Haskell端作为可变的字符数组(在OCaml中称为字符串),我们阻止GC移动该值.
>在C方面,我们存储图像的地址,并将它构建为QString.我不希望任何复制,因为QString使用copy-on-write.
>利润
也许这种方法很糟糕,因为如果我们需要调整大小图像,GC将实例化新图像,将旧图像复制到新图像,之后我们需要更新指向C侧图像的指针.
对不起,在我的想法中将无法使用.