Niektóre osoby nie są świadome, że są to possible to pass and return structs by value in C. Moje pytanie dotyczy kompilatora, który tworzy niepotrzebne kopie podczas zwracania struktur w C. Czy kompilatory C, takie jak GCC, używają optymalizacji Return value optimization(RVO), czy jest to tylko koncepcja C++? Wszystko, co czytałem o RVO i elizacji kopiowania, dotyczy C++.Optymalizacja wartości zwracanej i kopiowanie elementów w C
Rozważmy przykład. Aktualnie implementuję double-double data type w C (lub raczej float-float na początek, ponieważ uważam, że łatwe jest testowanie urządzenia). Rozważ następujący kod.
typedef struct {
float hi;
float lo;
} doublefloat;
doublefloat quick_two_sum(float a, float b) {
float s = a + b;
float e = b - (s - a);
return (doublefloat){s, e};
}
Czy kompilator zrobić tymczasową kopię wartości doublefloat
mogę zwrócić lub może być tymczasowa kopia pomijana?
Co z nazwaną optymalizacją wartości zwracanej (NRVO) w C? Mam kolejną funkcję
W tym przypadku zwracam nazwaną strukturę. Czy można w tym przypadku usunąć kopię tymczasową?
Należy stwierdzić, że jest to ogólne pytanie dla C i że przykłady kodu, które tutaj wykorzystałem, są jedynie przykładami (kiedy to zoptymalizuję, będę używał SIMD z wewnętrznymi taktykami). Jestem świadomy, że mogłem spojrzeć na wynik montażu, aby zobaczyć, co robi kompilator, ale myślę, że jest to jednak interesujące pytanie.
@BaummitAugen, nie byłem pewien, czy powinienem użyć znacznika C++. Ale wydaje mi się, że w moim pytaniu było jasne, że chodzi o C. Miałem nadzieję, że tag C++ przyciągnie ludzi, którzy są ekspertami w obu językach. –
@BaummitAugen jest takie pojęcie w C w ogóle. Usunąłem tag 'C', ponieważ wydaje mi się to erudystyczne. –
@IvayloStrandjev nadal pytanie dotyczy C, tag odnosi się do pytania, nie? – BeyelerStudios