MemoryView

MemoryView 提供在扩展库之间共享内存上的固定大小元素的多维同构数组的功能。

免责声明

概述

我们有时会处理某些类型的对象,这些对象在连续内存区域上具有相同类型固定大小元素的数组作为其内部表示。numo-narray 中的 Numo::NArray 和 rmagick 中的 Magick::Image 是此类对象的典型示例。MemoryView 充当枢纽的作用,在这些库之间共享此类对象的内部数据,而无需复制。

在某些领域(例如数据分析、机器学习和图像处理)中,无复制数据共享非常重要。在这些领域中,人们需要使用多个库来处理大量内存数据。如果我们被迫在库之间复制以交换大量数据,那么大量的数据处理时间必须用于复制数据。您可以通过使用 MemoryView 来避免此类浪费时间。

MemoryView 有两类 API

  1. 生产者 API

    类可以注册自己的 MemoryView 条目,该条目允许这些类的对象公开其 MemoryView

  2. 消费者 API

    消费者 API 允许我们获取和管理对象的 MemoryView

MemoryView 结构

MemoryView 结构 rb_memory_view_t 用于导出对象的 MemoryView。此结构包含对象的引用(MemoryView 的所有者)、指向导出内存头部的指针以及描述内存结构的元数据。元数据可以描述具有跨度的多维数组。

MemoryView 结构的成员

MemoryView 结构由以下成员组成。

MemoryView API

对于使用者

view 的成员填充为一维字节数组。

使用给定元素大小填充具有给定形状的连续数组的字节步长的 strides 数组。

填充 viewitem_desc 成员。

如果 MemoryView view 中的数据是行优先或列优先连续的,则返回 true

否则返回 false

如果 MemoryView view 中的数据是行优先连续的,则返回 true

否则返回 false

如果 MemoryView view 中的数据是列优先连续的,则返回 true

否则返回 false