#[repr(C)]pub struct ExecutorInlineStorage {
pub exec: MaybeUninit<Executor<'static>>,
pub backing: [MaybeUninit<u64>; 9389],
}Expand description
The exact #[repr(C)] byte layout the C/C++ FFI’s inline executor buffer must
hold: an Executor<'static> header immediately
followed by a default-sized (ExecutorSizing::DEFAULT) storage backing.
The FFI keeps the executor inline (heap-free — matching the Rust no-alloc
requirement) and carves its per-entry tables from the SAME buffer’s
backing tail. Because that buffer is pinned — the C
caller allocates it, it is initialised in place, and it is only ever reached
through a stable nros_executor_t* (never moved after init) — the resulting
self-borrow (the header’s slices pointing into the same struct’s tail) is
sound. The FFI probes size_of of THIS type (not bare Executor) to size
its _opaque array, and reinterprets _opaque as *mut ExecutorInlineStorage
(the executor stays at offset 0, so existing offset-0 accessors are unchanged).
Fields§
§exec: MaybeUninit<Executor<'static>>The executor, written in place (offset 0) by from_session_ptr_in.
backing: [MaybeUninit<u64>; 9389]The carved backing the executor’s slices borrow (the buffer’s tail).