#memory-layout #struct #block #u8 #i32 #f32 #push

memprint

一种打印结构体内存布局的方法

2 个版本

0.1.1 2024 年 8 月 18 日
0.1.0 2024 年 8 月 18 日

#6 in #u8

0BSD 许可证

32KB
100

memprint()

memprint 提供了一个单例 MemPrint trait (包括为其定义的 derive 宏!),
它允许你打印类型的底层内存布局。

示例

example output

这里有你可以使用的新发现的力量

use memprint::MemPrint;

#[derive(MemPrint)]
struct MyStruct {
    c: u8,
    a: i32,
    b: f32,
}

impl MyStruct {
    fn new(a: i32, b: f32, c: u8) -> Self {
        Self { a, b, c }
    }
}

fn main() {
    let struc = MyStruct::new(42, 3.14, b'A');
    
    // provides a detailed printout of a single struct
    MyStruct::memprint(&struc);

    let mut vec = Vec::new();

    vec.push(MyStruct::new(42,    3.14, b'A'));
    vec.push(MyStruct::new(69,    2.71, b'B'));
    vec.push(MyStruct::new(1337,  1.41, b'C'));
    vec.push(MyStruct::new(9001,  0.0,  b'D'));
    vec.push(MyStruct::new(80085, -1.0, b'E'));
    println!("\n\n");

    // prints a colour coded block of memory, representing the elements of the slice
    MyStruct::memprint_block(&vec);
}

todos

  • 添加对枚举和联合体的支持
  • 如果结构体中的任何字段也是具有 MemPrint trait 的结构体,则使用彩色打印输出

依赖项

~0.3–10MB
~60K SLoC