571得票6回答
C++标准允许未初始化的布尔值导致程序崩溃吗?

我知道在C++中的{{未定义行为}}可以让编译器做任何它想做的事情。然而,我遇到了一个崩溃问题,这让我感到惊讶,因为我认为代码足够安全。 在这种情况下,真正的问题只发生在使用特定编译器的特定平台上,并且仅在启用优化时才会出现。 我尝试了几种方法来复制问题并将其简化到最大程度。这里有一个名为...

406得票1回答
为什么Rust编译器不会优化假设两个可变引用不会别名的代码?

据我所知,引用/指针别名可以阻碍编译器生成优化代码的能力,因为它们必须确保在两个引用/指针确实是别名的情况下生成的二进制代码表现正确。例如,在以下C代码中,void adds(int *a, int *b) { *a += *b; *a += *b; } 使用clang版本6....

259得票2回答
为什么循环遍历一个有240个或更多元素的数组会对性能产生巨大影响?

在 Rust 中对数组运行求和循环时,我注意到当 CAPACITY >= 240 时性能急剧下降。大约以 CAPACITY = 239 的速度快了80倍。 是否有 Rust 对“短”数组进行的特殊编译优化? 使用rustc -C opt-level=3编译。use std::time::I...

185得票4回答
Rust的128位整数`i128`在64位系统上是如何工作的?

Rust支持128位整数,这些使用数据类型i128(无符号整数使用u128)表示:let a: i128 = 170141183460469231731687303715884105727; Rust如何在64位系统上操作i128值,例如如何进行算术运算?据我所知,该值无法适应x86-64 C...

132得票1回答
何时应该在Rust中使用inline?

Rust有一个"inline"属性,可以使用以下三种方式之一: #[inline] #[inline(always)] #[inline(never)] 何时应该使用它们? 在Rust参考文献中,我们看到一个内联属性部分的说明: 编译器根据内部启发式方法自动内联函数。错误地内联函...

34得票3回答
`-Os` 和 `-Oz` 在 rustc 中有什么优化作用?

执行rustc -C help命令会显示以下内容(除其他信息外): -C opt-level=val -- optimize with possible levels 0-3, s, or z The levels 0 to 3 are fairly intuitive, I...

29得票1回答
Rust能否在未来优化对象移动时的位复制过程?

考虑这段代码片段struct Foo { dummy: [u8; 65536], } fn bar(foo: Foo) { println!("{:p}", &foo) } fn main() { let o = Foo { dummy: [42u8; 65...

29得票1回答
为什么当我移除边界检查时,我的代码运行速度变慢了?

我正在使用Rust编写线性代数库。 我有一个函数,可以获取给定行和列的矩阵单元格的引用。此函数以一对断言开始,用于检查行和列是否在范围内: #[inline(always)] pub fn get(&self, row: usize, col: usize) -> &...

27得票1回答
LLVM的整数类型

LLVM语言将整数类型指定为iN,其中N是整数的位宽,范围从1到2^23-1(参见:http://llvm.org/docs/LangRef.html#integer-type) 我有两个问题: 将C程序编译为LLVM IR级别时,可能降低哪些类型为 i1、i2、i3等?看起来像是 i8...

26得票1回答
有没有一种方法可以使Rust将指针视为非别名,以便它可以将它们标记为LLVM优化器的“noalias”?

以下是指针别名的示例:pub unsafe fn f(a: *mut i32, b: *mut i32, x: *const i32) { *a = *x; *b = *x; } 经过 -C opt-level=s 编译,会生成以下汇编代码:example::f: pu...