Como usar a função size_of na ferrugem

Como usar a função size_of na ferrugem

Na ferrugem, podemos determinar o tamanho de um tipo específico usando a função size_of. Esta função está em Core :: Mem :: size_of e pega um tipo e retorna seu tamanho em bytes.

Vamos aprender a usar a função size_of para determinar o tamanho de vários tipos de ferrugem.

Tamanho da ferrugem dos tipos primitivos

Podemos determinar o tamanho dos tipos primitivos de ferrugem usando a função size_of. A sintaxe geral da função size_of é como mostrado abaixo:

pub const fn size_of()

Como mencionado, a função retornará o tamanho do tipo especificado em bytes. Estados de ferrugem O tamanho de um tipo não é estável em compilações cruzadas, exceto para tipos primitivos.

Vamos usar o exemplo a seguir para determinar o tamanho de um tipo booleano:

Use std :: Mem;
fn main ()
println!("Tamanho de bool: byte", mem :: size_of ::());

O programa de exemplo importa o módulo de memória da biblioteca padrão. Isso nos dá acesso à função size_of para determinar o tamanho de um bool.

Em seguida, chamamos a função dentro do método println e retornamos o tamanho de um tipo booleano.

A saída resultante é como mostrado abaixo:

$ Cargo Run
Tamanho de Bool: 1 byte

Podemos fazer isso para todos os outros tipos primitivos em ferrugem. Um exemplo é fornecido abaixo:

Use std :: Mem;
fn main ()
println!("Tamanho de bool: byte", mem :: size_of ::());
println!("Tamanho do número inteiro não assinado de 8 bits: byte", mem :: size_of ::());
println!("Tamanho do número inteiro não assinado de 16 bits: bytes", mem :: size_of ::());
println!("Tamanho do número inteiro não assinado de 32 bits: bytes", mem :: size_of ::());
println!("Tamanho do número inteiro não assinado de 64 bits: bytes", mem :: size_of ::());
println!("Tamanho do número inteiro assinado de 8 bits: byte", mem :: size_of ::());
println!("Tamanho do número inteiro assinado de 16 bits: bytes", mem :: size_of ::());
println!("Tamanho do número inteiro assinado de 32 bits: bytes", mem :: size_of ::());
println!("Tamanho do número inteiro assinado de 64 bits: bytes", mem :: size_of ::());
println!("Tamanho do tipo flutuante de 32 bits: bytes", mem :: size_of ::());
println!("Tamanho do tipo flutuante de 64 bits: bytes", mem :: size_of ::());
println!("Tamanho do personagem: bytes", mem :: size_of ::());

O programa simples acima mencionado determina o tamanho de todos os tipos primitivos na linguagem ferrugem. Um exemplo de saída resultante é como mostrado:

Tamanho de Bool: 1 byte
Tamanho de número inteiro não assinado de 8 bits: 1 byte
Tamanho do número inteiro não assinado de 16 bits: 2 bytes
Tamanho de número inteiro não assinado de 32 bits: 4 bytes
Tamanho de número inteiro não assinado de 64 bits: 8 bytes
Tamanho do número inteiro assinado de 8 bits: 1 byte
Tamanho do número inteiro assinado de 16 bits: 2 bytes
Tamanho do número inteiro assinado de 32 bits: 4 bytes
Tamanho do número inteiro assinado de 64 bits: 8 bytes
Tamanho do tipo flutuante de 32 bits: 4 bytes
Tamanho do tipo flutuante de 64 bits: 8 bytes
Tamanho do personagem: 4 bytes

Tamanho da ferrugem da estrutura

Na ferrugem, o tamanho das estruturas é determinado por um algoritmo simples:

  1. O algoritmo adiciona o tamanho do campo na ordem de declaração.
  2. Ele arredonda o tamanho do múltiplo mais próximo do alinhamento do próximo campo.
  3. Finalmente, o algoritmo arredonda o tamanho da estrutura para o múltiplo mais próximo de seu alinhamento.

Você pode aprender mais sobre o alinhamento no recurso fornecido abaixo:

https: // doc.Ferrute.org/stable/std/mem/fn.align_of.html

Um exemplo do tamanho de uma estrutura é como mostrado abaixo:

Usuário de estrutura
Nome: String,
Idade: U32,
E -mail: string,

fnmain ()
println!("Tamanho da estrutura: bytes", mem :: size_of: :())

O código anterior deve retornar o tamanho da estrutura como:

$ Cargo Run
Tamanho da estrutura: 56 bytes

Tamanho de ferrugem da matriz

Também podemos usar o método size_of para determinar o tamanho de uma matriz. Considere o exemplo fornecido abaixo:

println!("O tamanho da matriz é: bytes", mem :: size_of ::<[i32; 5]>())

O exemplo anterior determina o tamanho de uma matriz de tipos i32 e um comprimento de 5. A matriz equivalente é como mostrado abaixo:

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

O programa deve retornar o tamanho da matriz como:

O tamanho da matriz é: 20 bytes

Tamanho da ferrugem do ponteiro

O exemplo a seguir avalia o tamanho de um ponteiro usando a sintaxe:

println!("Tamanho do ponteiro bytes", mem :: size_of ::<*const i32>());

O código anterior retorna o tamanho de um ponteiro bruto em uma referência i32. A saída resultante é fornecida abaixo:

Tamanho de Pointer8 bytes

Conclusão

Este artigo descreve como determinar o tamanho de vários tipos de ferrugem, incluindo tipos primitivos, matrizes, ponteiros e estruturas. Além disso, a função size_of foi discutida em detalhes. Esperamos que você tenha achado este artigo útil. Verifique o outro artigo da dica do Linux para obter mais dicas e artigos.