Thanks to visit codestin.com
Credit goes to lib.rs

#memory-allocator #executable #jit #code #allocator #executable-code

no-std bin+lib jit-allocator2

An executable code allocator. Fork for jit-allocator

1 unstable release

0.2.9 May 30, 2025

#249 in No standard library

Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App Codestin Search App

574 downloads per month
Used in 3 crates (2 directly)

MIT license

87KB
2K SLoC

jit-allocator2

Maintained fork of jit-allocator. If development ends up continuing on the original repository, this will become a mirror.

A simple memory allocator for executable code. Use JitAllocator type to allocate/release memory and virtual_memory module functions to enable proper access for executable code. So if you want to allocate a new code to execute it is usually done like this:

use jit_allocator2::*;
let compiled_code = ...;
let compiled_code_size = ...;

let mut jit_allocator = JitAllocator::new(Default::default());
let (rx, rw) = jit_allocator.alloc(size)?;

protect_jit_memory(ProtectJitAccess::ReadWrite); // allows to write to RWX code in current thread,
                                                 // it is no-op on all platforms except macOS AArch64
unsafe { copy_nonoverlapping(compiled_code, rw, compiled_code_size);  }
protect_jit_memory(ProtectJitAccess::ReadExecute); // disables writes to RWX code in current thread, 
                                                   // it is no-op on all platforms except macOS AArch64
flush_instruction_cache(rx, compiled_code_size); // flush icache, not required on x86-64 
                                                 // but required on other platforms due 
                                                 // to lack of coherent dcache/icache.

// When you're done with your machine code you can release it:
unsafe { 
    jit_allocator.release(rx)?;
}

Dependencies

~0.8–11MB
~57K SLoC