#[repr(C)]pub struct instr_noalloc_t {
pub instr: instr_t,
pub srcs: [opnd_t; 7],
pub dsts: [opnd_t; 8],
pub encode_buf: [byte; 17],
}Expand description
A version of #instr_t which guarantees to not use heap allocation for regular decoding and encoding. It inlines all the possible operands and encoding space inside the structure. Some operations could still use heap if custom label data is used to point at heap-allocated structures through extension libraries or custom code.
The instr_from_noalloc() function should be used to obtain an #instr_t pointer for passing to API functions:
\code instr_noalloc_t noalloc; instr_noalloc_init(dcontext, &noalloc); instr_t *instr = instr_from_noalloc(&noalloc); pc = decode(dcontext, ptr, instr); \endcode
No freeing is required. To re-use the same structure, instr_reset() can be called.
Some operations are not supported on this instruction format:
- instr_clone()
- instr_remove_srcs()
- instr_remove_dsts()
- Automated re-relativization when encoding.
This format does not support caching encodings, so it is less efficient for encoding. It is intended for use when decoding in a signal handler or other locations where heap allocation is unsafe.
Fields§
§instr: instr_t< The base instruction, valid for passing to API functions.
srcs: [opnd_t; 7]< Built-in storage for source operands.
dsts: [opnd_t; 8]< Built-in storage for destination operands.
encode_buf: [byte; 17]< Encoding space for instr_length(), etc.
Trait Implementations§
Source§impl Clone for instr_noalloc_t
impl Clone for instr_noalloc_t
Source§fn clone(&self) -> instr_noalloc_t
fn clone(&self) -> instr_noalloc_t
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for instr_noalloc_t
impl Debug for instr_noalloc_t
impl Copy for instr_noalloc_t
Auto Trait Implementations§
impl Freeze for instr_noalloc_t
impl RefUnwindSafe for instr_noalloc_t
impl Send for instr_noalloc_t
impl Sync for instr_noalloc_t
impl Unpin for instr_noalloc_t
impl UnsafeUnpin for instr_noalloc_t
impl UnwindSafe for instr_noalloc_t
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more