- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在编写一个 Ruby 扩展,我正在使用函数 Data_wrap_struct
。
为了参与 Ruby 的标记和清除垃圾收集过程,我需要定义一个例程来释放我的结构,以及一个例程来标记从我的结构到其他结构的任何引用。我通过经典的 free
函数来释放内存,但我不知道如何使用标记函数。
我的结构听起来像这样
typedef struct
{
int x;
int y;
} A;
typedef struct
{
A collection[10];
int current;
} B;
我认为我需要一个标记函数来标记结构 B 的 collection
中的引用。
谁能给我看一个例子,看看标记函数是如何工作的?
最佳答案
mark 函数用于标记您的 C 结构拥有的任何 Ruby 对象。
typedef struct {
VALUE ruby_object;
} MyStruct;
void mark(void * p) {
/* p is the wrapped pointer to the MyStruct instance */
MyStruct * my_struct = (MyStruct *) p;
rb_gc_mark(my_struct->ruby_object);
}
如果您的结构拥有的对象未被标记,垃圾收集器可能会清除它并且您的代码可能最终会尝试使用已完成的对象。
关于c - Data_wrap_struct 和标记函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8398895/
我正在为物理引擎编写一个 Ruby 扩展。此物理引擎具有链接到世界 的body,因此我的Ruby 对象是World 和Body。主体是使用 world->CreateBody 构建(在 C++ 中)并
我正在编写一个 Ruby 扩展,我正在使用函数 Data_wrap_struct。 为了参与 Ruby 的标记和清除垃圾收集过程,我需要定义一个例程来释放我的结构,以及一个例程来标记从我的结构到其他结
这是我的精简代码,它隔离了我的问题: #include "ruby.h" #include "stdlib.h" typedef struct HandValues { double pair
我在 Ruby C 扩展中包装了一个 C 结构,但我在文档中找不到 Data_Wrap_Struct 和 TypedData_Wrap_Struct 之间的区别,这两个函数之间有什么区别? 最佳答案
我正在尝试为一个库创建一个 C 包装器,并且我构建了这段代码,它似乎与网络上的大多数示例相匹配: #include #include #include "ruby.h" #include "lps
rb_iv_get 和 rb_iv_set 对比。 Data_Wrap_Struct 用于自定义类 因此,在阅读 Ruby 扩展 API 时,我发现 Data_Wrap_Struct 可以将指针转换为
我是一名优秀的程序员,十分优秀!