#[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 more