# Mono Internals

This section documents some of the internal APIs used inside Mono that developers extending or altering Mono might want to use.

## Strings

### Other Encodings

These routines are used when coping with strings that come from Mono's environment, and might be encoded in one or more of the external encodings.

For example, some file systems might historically contain a mix of file names with both old and new encodings, typically UTF8 for new files, and the old files would be encoded in an 8 bit character set (ISO-8859-1 for example).

These routines try a number of encodings, those specified in the `MONO_ENCODINGS` environment variable and return unicode strings that can be used internally.

See the mono(1) man page for more details.

#### mono_unicode_from_external

#### mono_unicode_to_external

#### mono_utf8_from_external

## Marshalling functions

#### mono_marshal_alloc

#### mono_marshal_asany

#### mono_marshal_free_array

#### mono_marshal_free_asany

#### mono_marshal_free

#### mono_marshal_get_castclass

#### mono_marshal_get_delegate_begin_invoke

#### mono_marshal_get_delegate_end_invoke

#### mono_marshal_get_delegate_invoke

#### mono_marshal_get_icall_wrapper

#### mono_marshal_get_isinst

#### mono_marshal_get_ldfld_wrapper

#### mono_marshal_get_managed_wrapper

#### mono_marshal_get_native_wrapper

#### mono_marshal_get_proxy_cancast

#### mono_marshal_get_ptr_to_struct

#### mono_marshal_get_remoting_invoke_for_target

#### mono_marshal_get_remoting_invoke

#### mono_marshal_get_remoting_invoke_with_check

#### mono_marshal_get_runtime_invoke

#### mono_marshal_get_stelemref

#### mono_marshal_get_stfld_wrapper

#### mono_marshal_get_struct_to_ptr

#### mono_marshal_get_synchronized_wrapper

#### mono_marshal_get_unbox_wrapper

#### mono_marshal_get_xappdomain_invoke

#### mono_marshal_load_type_info

#### mono_marshal_method_from_wrapper

#### mono_marshal_set_last_error

#### mono_marshal_type_size

## Metadata Loader Locking: Internals

The locking functions here are used by code in class.c and metadata.c to lock access to the shared hashtables inside the MonoImage.

#### mono_loader_lock

#### mono_loader_unlock

## Garbage Collector Internal Interface

The internal interface of the Mono GC is the interface used between the runtime engine and the garbage collector.

#### mono_gc_alloc_fixed

#### mono_gc_free_fixed

#### mono_gc_make_descr_from_bitmap

#### mono_gc_base_init

#### mono_gc_invoke_finalizers

#### mono_gc_is_gc_thread

#### mono_gc_pending_finalizers

#### mono_gc_register_thread

#### mono_gc_finalize_notify