- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在编写一个 Vulkan 渲染器,我刚刚意识到我应该只接受 repr(C)
类型,但据我所知,没有办法在编译时实际检查它。
struct Vertex {
x: f32,
y: f32,
b: Box<f32>
}
#[repr(C)]
struct Vertex2 {
x: f32,
y: f32,
b: Box<f32>
}
fn to_bytes<T>(t: &T) -> &[u8]{
let p: *const T = t;
let p = p as *const u8;
unsafe{
std::slice::from_raw_parts(p, std::mem::size_of::<T>())
}
}
fn main() {
let v = Vertex{x: 42.0, y: 0.0, b: Box::new(42.0)};
let v2 = Vertex2{x: 42.0, y: 0.0, b: Box::new(42.0)};
println!("{:?}", to_bytes(&v));
println!("{:?}", to_bytes(&v2));
}
经过几次尝试,我终于看出了 repr(c)
之间的区别。和 repr(rust)
但只有当我使用 Box
.
repr(C)
之间有什么区别?和 repr(rust)
?我可以假设如果一个类型只包含其他 POD 类型,那么布局将与 C 中的布局相同吗?
例子:
let slice = base.device
.map_memory::<Vertex>(vertex_input_buffer_memory,
0,
vertex_input_buffer_info.size,
vk::MemoryMapFlags::empty())
.unwrap();
slice.copy_from_slice(&vertices);
我正在填充交给 Vulkan 的缓冲区,因此我认为此处的布局可能很重要。
最佳答案
您在程序输出中看到的差异不是由于内存布局。 Box<T>
heap 分配并存储指向堆内容的指针,因此您要打印的是指针。作为Box<T>
不执行任何实习/对象池,这两个地址当然是不同的。可能有点令人困惑的是地址彼此如此接近。我猜想这与 Rust 使用的分配器 jmalloc 有关,它有用于小分配的密集池。
Can I assume that if a type only contains other POD types, then the layout will be the same as in C?
不。您几乎不能对 Rust 类型的内存布局做出任何假设。这是有意不指定的,以允许优化,例如字段重新排序。即使现在,repr(Rust)
火柴repr(C)
非常接近,你不能假设它会永远这样。
关于rust - repr(C) 和 repr(rust) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42830493/
在交互式 Python 提示符上,当我没有将表达式 foo 的输出绑定(bind)到名称时,Python 将写入 builtins.repr(foo) 的输出> 到终端。 在较新版本的 Python
我目前正在编写一个 Vulkan 渲染器,我刚刚意识到我应该只接受 repr(C) 类型,但据我所知,没有办法在编译时实际检查它。 struct Vertex { x: f32, y:
是否有等效的 Pythons repr Scala 中的函数? 即一个函数,你可以给任何 scala 对象,它会产生一个有效的 scala 代码的对象的字符串表示。 例如: val l = List(
需要字符串在打印输出中显示 \n,且不带尾随 + 前导 '。目前在输入上使用repr(打开+读取.txt),所以我想知道删除'以进行正确索引/搜索的最佳方法是什么? repr('s')[1:-1] r
我想使用 repr() 获取 Python 编码的字符串文字(我可以将其粘贴到某些源代码中),但我更喜欢带有真正换行符的三引号字符串比 \n 转义序列。 我可以对字符串进行后处理,将 \n 转换回换行
我正在用 Python 处理一些文本解析,为此,对我要解析的每个字符串应用 repr() 函数对我来说很好,但在解析之后,我需要将一些已解析的子字符串转换回来到以前的表示,因为我想打印它们但我无法做到
所以我有一门类(class),我设置了类似的内容 class Piece: def __init__(): self.txt = "\u2665" # some met
作为Python 2 documentation on __repr__ 状态: If at all possible, this (i.e. __repr__) should look like a
我一直在阅读 repr在 Python 中。我想知道 repr 输出的应用程序是什么是。例如 class A: pass repr(A) ='' b=A() repr(b) = '' 什么时候会对
我正在使用一个小的 Python 脚本来生成一些将在 C 头文件中使用的二进制数据。 此数据应声明为 char[],如果可以将其编码为字符串(当它们不在 ASCII 可打印范围内时使用相关的转义序列)
在python中,repr和反引号`(1的左边)有区别吗? 用于演示: class A(object): def __repr__(self): return 'repr A'
我有一个节点类以十六进制和 HSV 形式保存 RGB 数据。我将使用它以各种方式对颜色进行排序,并且希望 HSV 元组保持浮点形式以进行比较,而不是每次使用都从字符串转换。有没有一种方法可以指定数据类
a = b'\x00\x01' ra = repr(a) # ra == "b'\\x00\\x01'" assert invert_repr(ra) == a invert_repr 的正确形式
我需要一个结构被视为 16 个无符号整数的数组,并且传递 CreditCard 类型将是透明的,因为我将传递一个 16 个无符号整数的数组。 如何使这段代码按照设计的方式工作? use std::fm
我有这个 C 代码: typedef void (*f_t)(int a); struct Foo { f_t f; }; extern void f(struct Foo *); b
我有一个结构: struct A { names: Vec, } 还有另一个结构: #[repr(C)] struct B { pub a: A, } 这是否使 A 也具有 repr(
除最后一部分外,我的代码运行完美。我想用 repr 函数重新创建对象,但它显然不起作用。我在这里和网上都试过了,但我还是很困惑。有什么方法可以做到吗?如果可以,语法是什么? class Modulo(
这个问题在这里已经有了答案: Convert "\x" escaped string into readable string in python (4 个答案) 关闭 7 个月前。 我有这个 st
我想要一种简单的方法来获取 repr() 之类的字典字符串按键排序。 my_print(dict(a=1, b=2, c=3)) -> "{'a': 1, 'b': 2, 'c': 3}" 我的解决方
我正在尝试在 Java 中完全模拟 Python 的 repr;这包括尽可能使用单引号。 Python 使用什么方法来确定它应该发出哪种引号? 编辑:我正在寻找一些实际代码,位于 Python 网络中
我是一名优秀的程序员,十分优秀!