pub(crate) fn init(&mut self, fiber: *const FiberContext) -> u64 {
        unsafe {
            let s_ptr = self.0.offset(DEFAULT_STACK_SIZE as isize);
            (s_ptr.offset(-8) as *mut usize).write(fiber as _);
            (s_ptr.offset(-16) as *mut usize).write(guard as _);
            // this is a dummy function for 16bytes-align.
            (s_ptr.offset(-24) as *mut usize).write(asm::skip as _);
            (s_ptr.offset(-32) as *mut usize).write(new_context as _);
            // more bytes to store registers.
            s_ptr.offset(-32 - asm::OFFSET) as u64
        }
    }
Initialize `Stack`.

Addresses of some functions are stored at the bottom of the stack area.

- `new_context` is to be called when the Fiber coroutine is 'resume'd at the first time.
- `guard` is to be called when 'resume'd **after** the Fiber coroutine execution was finished.
- a pointer which points FiberContext is placed at the very bottom of the stack.
ruruby/src/coroutine/stack.rs