Моя команда работает на сервере MMO в Ruby, и мы решили начать переводить интенсивные вычисления в расширение C. В рамках этого усилия мы перенесли фактическое хранилище данных в C (используя Data_Get_Struct и все такое). Так, например, каждый объект Ruby «Zone» имеет связанную структуру «ZoneKernel :: Zone» C, где хранятся фактические двоичные данные.Хранение данных в расширении ruby C - ужасная идея или нет?
В принципе, мне интересно, это ужасная идея или нет. Я не очень хорошо знаком с внутренними компонентами ruby, но кажется, что данные должны быть точными до тех пор, пока родительская зона остается в памяти на рубиновой стороне (таким образом предотвращая сбор мусора из данных C).
Одно из предостережений заключается в том, что мы получаем полурегулярные «Ошибки согласованности стека», которые разбивают наш сервер - это похоже на потенциально связанную проблему с памятью (а не только на ваш segfault для сада) - если кто-либо знает что бы это могло быть, я был бы признателен за это!
Это, вероятно, должно быть на programmers.stackoverflow.com. –