我的团队正在使用 Ruby 开发 MMO 服务器,我们选择开始将计算密集型操作转移到 C 扩展中。作为这项工作的一部分,我们将实际的数据存储移到了 C 中(使用 Data_Get_Struct 等)。因此,例如,每个 Ruby“Zone”对象都有一个关联的“ZoneKernel::Zone”C 结构,其中存储了实际的二进制数据。
基本上,我想知道这是否是一个糟糕的主意。我对 ruby 内部结构不是很熟悉,但只要父 Zone 保留在 ruby 端的内存中(从而防止对 C 数据进行垃圾收集),数据似乎就应该没问题。
一个警告是,我们已经收到了导致服务器崩溃的半常规“堆栈一致性错误”——这似乎是一个相关的内存问题(而不仅仅是你的花园品种段错误)——如果有人知道那可能是什么,我也将不胜感激!