Pytania otagowane jako llvm-codegen

5
Czy standard C ++ pozwala niezainicjowanemu boolowi na zawieszenie programu?
Wiem, że „niezdefiniowane zachowanie” w C ++ może pozwolić kompilatorowi na zrobienie wszystkiego, co chce. Miałem jednak awarię, która mnie zaskoczyła, ponieważ uznałem, że kod jest wystarczająco bezpieczny. W takim przypadku prawdziwy problem wystąpił tylko na konkretnej platformie używającej określonego kompilatora i tylko wtedy, gdy włączono optymalizację. Próbowałem kilku rzeczy, …

1
Dlaczego kompilator Rust nie optymalizuje kodu, zakładając, że dwa zmienne odwołania nie mogą aliasu?
O ile mi wiadomo, aliasing odniesień / wskaźników może utrudniać kompilatorowi generowanie zoptymalizowanego kodu, ponieważ muszą one zapewnić, że wygenerowany plik binarny zachowuje się poprawnie w przypadku, gdy dwa odniesienia / wskaźniki faktycznie są aliasami. Na przykład w poniższym kodzie C void adds(int *a, int *b) { *a += *b; …

2
Dlaczego występuje duży wpływ na wydajność przy zapętlaniu tablicy z 240 lub więcej elementami?
Podczas uruchamiania pętli sumy nad tablicą w Rust zauważyłem ogromny spadek wydajności, gdy CAPACITY> = 240. CAPACITY= 239 jest około 80 razy szybszy. Czy istnieje specjalna optymalizacja kompilacji, którą Rust robi dla „krótkich” tablic? Kompilowany z rustc -C opt-level=3. use std::time::Instant; const CAPACITY: usize = 240; const IN_LOOPS: usize = …

4
Jak działa 128-bitowa liczba całkowita Rusta „i128” w systemie 64-bitowym?
Rust ma 128-bitowe liczby całkowite, które są oznaczone typem danych i128(i u128dla liczb całkowitych bez znaku): let a: i128 = 170141183460469231731687303715884105727; Jak Rust sprawia, że ​​te i128wartości działają w systemie 64-bitowym; np. jak to robi na nich arytmetykę? Ponieważ o ile wiem, wartość nie mieści się w jednym rejestrze procesora …

1
Kiedy inline powinno być używane w Rust?
Rust ma atrybut „inline”, którego można użyć w jednym z tych trzech rodzajów: #[inline] #[inline(always)] #[inline(never)] Kiedy należy ich używać? W odwołaniu do Rusta widzimy sekcję atrybutów inline mówiącą Kompilator automatycznie wstawia funkcje na podstawie wewnętrznej heurystyki. Nieprawidłowe wstawianie funkcji może w rzeczywistości spowolnić program, dlatego należy z niego korzystać …

3
Dlaczego LLVM przydziela zmienną redundantną?
Oto prosty plik C z definicją enum i mainfunkcją: enum days {MON, TUE, WED, THU}; int main() { enum days d; d = WED; return 0; } Przenosi się na następujący LLVM IR: define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca i32, align …
9 c  llvm  llvm-codegen 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.