gpt4 book ai didi

c - Data_wrap_struct 和标记函数

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:22 24 4
gpt4 key购买 nike

我正在编写一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com