[Mono-list] Embedded API. Numeric Boxing and GC

jonathan at mugginsoft.com jonathan at mugginsoft.com
Tue Feb 25 10:20:41 UTC 2014

I box my numeric primitives using a macro:

#define DB_BOX_INT64( x ) ( mono_value_box(mono_domain_get(), mono_get_int64_class(), &x) )

And use it like so:


- (void)box
MonoObject *monoObject = DB_BOX_INT64(value);

I save the MonoObject * into a local variable. The collector will see the object on the stack and collect it only when the enclosing function completes.

- (void)box:(long long)value
	self.monoObject = DB_BOX_INT64(value);
	self.gcHandle = mono_gchandle_new(self.monoObject, FALSE);

- (void)dealloc

I save the MonoObject * into an instance variable. The collector will free the MonoObject after the call to mono_gchandle_free().

Is the above correct?



More information about the Mono-list mailing list