我正在考虑编写一个基于 C 的 Ruby gem 来加速Prawn中的文本换行。我之前读过一小部分 MRI 的 C 源代码,但还不了解用于构建扩展的 API。
在我的 C 代码中,我想获得一个指向 Ruby 字符串中数据的直接指针,然后逐个字节地遍历它。除此之外,我想将指针存储在我自己的缓冲区中struct
,并且不仅在单个调用的范围内使用它们,而且在对扩展代码的后续调用中使用它们。
这可能吗?GC 可以移动字符串,使我的指针无效吗?而且,如何让 Ruby 知道我在自己的struct
s 中持有指向字符串的指针(因此 GC 不会尝试回收它们)?这段代码能否以与 MRI 1.8 和 1.9 兼容的方式编写?
既然我问的是在基于 C 的 Ruby 扩展中安全地使用指针:我可以像在“常规”基于 C 的项目中一样使用malloc
和吗?free