От the pickaxe:Должен ли я использовать ALLOCA_N, если я сам выпущу память?
Вы можете иногда нужно выделить память в расширении тха т не будет использоваться для хранения объектов, возможно, у вас есть гигантское растровое изображение для Bloom фильтра, изображения или целая куча небольших структур, которые Ruby не использует напрямую. Чтобы правильно работать с сборщиком мусора, , вы должны использовать следующие процедуры распределения памяти. Эти подпрограммы выполняют немного больше работы, чем функция stardard malloc. Например, если ALLOC_N определяет, что он не может выделить желаемое количество memy, он будет вызывать сборщик мусора, чтобы попробовать , чтобы вернуть некоторое пространство. Это поднимет NoMemError, если он не может или если запрашиваемый объем памяти неверен
Но в данной функции, я точно знаю, когда выпуск памяти. В этом случае, должен ли я использовать ALLOC_N
для распределения памяти?
Есть ли законные случаи, когда я должен освобождать память самостоятельно, или лучше всегда использовать ALLOC_N
и не заботится об этом?
Хороший блог, который объясняет C Расширения: http://blog.aeolusproject.org/category/ruby/page/2/ – thomthom
Более новой функцией может быть использование 'ruby_xfree'. – thomthom