Co to jest static inline w C (nie C ++)? Jestem bardzo zdezorientowany, dlaczego wiele funkcji zostało zadeklarowanych jako ' statyczne inline ' w jądrze systemu Linux.


Najlepsza odpowiedź

Gdy funkcja jest zdefiniowana jako statyczna , funkcja może być widoczne i używane tylko w tym samym pliku źródłowym. Nie można go wywołać spoza pliku źródłowego, w którym jest zdefiniowany (chyba że do jego wywołania jest używany wskaźnik funkcji). Funkcja jest faktycznie „ukryta” przed wyświetleniem poza bieżącym plikiem źródłowym.

Gdy funkcja jest zdefiniowana jako inline , pytasz o kompilator do generowania kodu dla elementów wewnętrznych funkcji bezpośrednio tam, gdzie mają miejsce wywołania funkcji, zamiast generować wywołania funkcji. Ta technika może poprawić wydajność, eliminując narzut wywołań funkcji, ale w konsekwencji może zwiększyć zużycie pamięci generowanego kodu. Jednak kompilator nie ma obowiązku generowania kodu funkcji w tekście, więc jeśli funkcja jest zbyt długa lub złożona albo kompilator po prostu nie może tego zrobić z jakiegoś powodu, generowane jest normalne wywołanie funkcji. Dlatego mówimy, że inline jest tylko wskazówką dla kompilatora.

Łącząc je razem, funkcja jest zdefiniowana jako statyczny i inline to taki, który będzie niewidoczny poza bieżącym plikiem źródłowym i taki, którego kod będzie być generowane w tekście, gdziekolwiek to wywołasz, jeśli kompilator może to zrobić. To podejście jest powszechnie stosowane w przypadku bardzo małych, prostych, często nazywanych wewnętrznymi funkcjami pomocniczymi, które nie są częścią publicznego API.

Odpowiedź

W przypadku funkcji wbudowanych kod w są one kopiowane do funkcji wywołującej bez narzutu wywołania funkcji.

W jądrze jest szeroko stosowany. Zwykle robi się to w celu poprawy wydajności, większej optymalizacji, chociaż niekoniecznie.

Jest używany głównie w przypadku funkcji krytycznych pod względem czasu i możemy zauważyć dużą różnicę w wydajności.

Jednak nawet jeśli nie używamy słowa kluczowego inline, kompilator może próbować wykonać inline jako część optymalizacji.

Zasadą jest, że statyczne funkcje inline powinny znajdować się w nagłówku. Definiuje funkcję inline z powiązaniem wewnętrznym. Możemy więc powiedzieć, że takie funkcje będą lokalne dla jednostki translacyjnej i zawarte w niej.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *