Jak używać funkcji size_of w rdzy

Jak używać funkcji size_of w rdzy

W rdzy możemy określić rozmiar określonego typu za pomocą funkcji size_of. Ta funkcja jest w rdzeniu :: mem :: size_of i przyjmuje typ i zwraca swój rozmiar w bajtach.

Dowiedzmy się, jak korzystać z funkcji size_of, aby określić rozmiar różnych rodzajów w rdzy.

Rozmiar rdzy prymitywnymi typów

Możemy określić rozmiar typów prymitywnych rdzy za pomocą funkcji size_of. Ogólna składnia funkcji size_of jest jak pokazano poniżej:

pub const fn size_of()

Jak wspomniano, funkcja zwróci rozmiar określonego typu w bajtach. Stwierdza, że ​​rozmiar typu nie jest stabilny w kompilacjach krzyżowych, z wyjątkiem typów prymitywnych.

Użyjmy następującego przykładu, aby określić rozmiar typu logicznego:

Użyj STD :: MEM;
fn main ()
println!(„Rozmiar bool: bajt”, mem :: size_of ::());

Przykładowy program importuje moduł pamięci ze standardowej biblioteki. Daje nam to dostęp do funkcji size_of w celu ustalenia rozmiaru bool.

Następnie wywołujemy funkcję wewnątrz metody println i zwracamy rozmiar typu logicznego.

Powstałe wyjście jest jak pokazano poniżej:

$ Cargo Run
Rozmiar bool: 1 bajt

Możemy to zrobić dla wszystkich innych prymitywnych rodzajów rdzy. Przykład znajduje się poniżej:

Użyj STD :: MEM;
fn main ()
println!(„Rozmiar bool: bajt”, mem :: size_of ::());
println!(„Rozmiar 8-bitowej liczby całkowitej: bajt”, mem :: size_of ::());
println!(„Rozmiar 16-bitowej liczby całkowitej: bajtów”, mem :: size_of ::());
println!(„Rozmiar 32-bitowej liczby całkowitej: bajtów”, mem :: size_of ::());
println!(„Rozmiar 64-bitowej liczby całkowitej: bajtów”, mem :: size_of ::());
println!(„Rozmiar 8-bitowej liczby całkowitej: bajt”, Mem :: size_of ::());
println!(„Rozmiar 16-bitowej liczby całkowitej: bajty”, Mem :: size_of ::());
println!(„Rozmiar 32-bitowej podpisanej liczby całkowitej: bajty”, Mem :: size_of ::());
println!(„Rozmiar 64-bitowej liczby całkowitej: bajty”, Mem :: size_of ::());
println!(„Rozmiar 32-bitowych pływających typów: bajtów”, Mem :: size_of ::());
println!(„Rozmiar 64-bitowego typu pływającego: bajtów”, mem :: size_of ::());
println!(„Rozmiar postaci: bajty”, Mem :: size_of ::());

Wyżej wymieniony prosty program określa wielkość wszystkich prymitywnych typów w języku rdzy. Przykładem wynikającego z tego wyjścia jest jak pokazano:

Rozmiar bool: 1 bajt
Rozmiar 8-bitowej liczby całkowitej: 1 bajt
Rozmiar 16-bitowej liczby całkowitej: 2 bajtów
Rozmiar 32-bitowej liczby całkowitej: 4 bajtów
Rozmiar 64-bitowej liczby całkowitej: 8 bajtów
Rozmiar 8-bitowej liczby całkowitej: 1 bajt
Rozmiar 16-bitowej liczby całkowitej: 2 bajty
Rozmiar 32-bitowej podpisanej liczby całkowitej: 4 bajty
Rozmiar 64-bitowej liczby całkowitej: 8 bajtów
Rozmiar 32-bitowego pływającego typu: 4 bajty
Rozmiar 64-bitowego pływającego typu: 8 bajtów
Rozmiar charakteru: 4 bajty

Rozmiar rdzy struktury

W rdzeniu rozmiar struktur jest określany przez prosty algorytm:

  1. Algorytm dodaje rozmiar pola w kolejności deklaracji.
  2. Zaokrągla rozmiar do najbliższej wielu wyrównania następnego pola.
  3. Wreszcie, algorytm zaokrągla rozmiar struktury do najbliższej wielkości jej wyrównania.

Możesz dowiedzieć się więcej o wyrównaniu w zasobach podanym poniżej:

https: // doc.Rust-Lang.org/stabilny/std/mem/fn.ALIGN_OF.html

Przykład wielkości struktury jest pokazany poniżej:

Użytkownik struct
Nazwa: ciąg,
Wiek: U32,
E -mail: ciąg,

fnmain ()
println!(„Rozmiar struktury: bajte”, Mem :: size_of: :())

Poprzedni kod powinien zwrócić rozmiar struktury jako:

$ Cargo Run
Rozmiar struktury: 56 bajtów

Rozmiar rdzy tablicy

Możemy również użyć metody size_of do określenia rozmiaru tablicy. Rozważ przykład podany poniżej:

println!(„Rozmiar tablicy to: bajty”, mem :: size_of ::<[i32; 5]>())

Poprzedni przykład określa rozmiar tablicy typów i32 i długość 5. Równoważna tablica jest jak pokazana poniżej:

Niech my_array: [i32; 5] = [1,2,3,4,5];

Program powinien zwrócić rozmiar tablicy jako:

Rozmiar tablicy to: 20 bajtów

Rozmiar rdzy wskaźnika

Poniższy przykład ocenia rozmiar wskaźnika za pomocą składni:

println!(„Rozmiar wskaźnika bajtów”, mem :: size_of ::<*const i32>());

Poprzedni kod zwraca rozmiar surowego wskaźnika w odniesieniu do i32. Powstałe dane wyjściowe przedstawiono poniżej:

Rozmiar wskaźników 8 bajtów

Wniosek

W tym artykule opisano, jak określić wielkość różnych rodzajów rdzy, w tym prymitywne typy, tablice, wskaźniki i struktury. Ponadto funkcja size_of została szczegółowo omówiona. Mamy nadzieję, że ten artykuł jest pomocny. Sprawdź drugi artykuł z podpowiedzi Linux, aby uzyskać więcej wskazówek i artykułów.