Função aloca 3 c

Função aloca 3 c
O espaço que é liberado periodicamente é alocado com o comando aloca. O quadro da pilha do chamador é alocado o comprimento bytes de memória pelo método aloca (). Depois que o código que invocou aloca () retornou ao seu chamador, essa memória intermediária é imediatamente liberada. Dentro deste guia, discutiremos o uso de aloca () para atribuir o espaço de memória a uma variável sem libertar no último:
  • #incluir
  • Void *aloca (size_t tamanho);

Valor de retorno

Uma referência ao ponto de partida da região atribuída é retornada pelo método aloca (). O script se comporta de maneira indefinível se a tarefa resultar em um transbordamento de pilha.

Algumas confirmações

Posix.1-2001 não fornece este método. Sabe -se que o método aloca () está presente em 32V, 3BSD, PWB, PWB.2 e 4BSD. Está documentado em 4.Página manual da 3BSD. A variante GNU é usada pelo Linux.

Explicação

A função aloca () depende do programa de compilação, bem como do sistema de destino. Quando contrastado com o uso de Malloc (3) mais gratuito, o uso dele pode torná -lo mais eficiente em alguns cenários (3). Sob algumas circunstâncias, também pode facilitar a desalocação de espaço em programas que empregam Longjmp (3) ou SiglongJmp (3). No entanto, não é instruído a consumi -lo.

Suponha que a memória alocada por aloca () seja reservada dentro do quadro da pilha. Se de alguma forma o retorno do método for ignorado por uma chamada de função para longjmp (3) ou siglongjmp, o armazenamento será liberado instantaneamente (3). Livre (3) Memória que aloca () distribuiu não deve ser tentada! As chamadas aloca () são frequentemente traduzidas usando um script embutido pelo GCC (1).

Insetos

Se o quadro da pilha puder não ser expandido, parece não haver uma mensagem de falha. Embora, se o aplicativo tentar usar a memória não atribuída após um posicionamento quebrado, ele está qualificado para obter um sinal SigseGV. Como essa memória de pilha alocada por aloca () pode ser exibida na pilha no meio da região para os parâmetros do método em várias plataformas, o aloca () não deve ser usado na lista de parâmetros de uma chamada de método.

Exemplo 01

Vamos começar com nossos primeiros exemplos de uso da função aloca () de C. Primeiro, precisamos criar um arquivo C usando a instrução Touch dentro do diretório de trabalho atual do sistema Kali Linux. Depois disso, você pode tentar abri -lo em qualquer editor de sua escolha para adicionar um script c dentro dele. Estamos usando o editor do VIM para abrir o “Allocex.Arquivo C ”.


Dentro do arquivo vazio, adicionamos o seguinte código. Este código começou com o “stdio.Cabeçalho H ”para usar o fluxo de entrada e saída padrão no programa. O “Alloca.H ”o cabeçalho tem sido usado para usar a função aloc () c neste código. Este código contém uma única função main () que está inicializando uma variável inteira chamada "número" alocada com a memória do tamanho 4.

O loop "for" foi inicializado e usado para incrementar o valor da variável "número" por 1 em cada índice. O próximo loop "for" foi usado para exibir cada valor de índice do número da variável usando a instrução Printf (). Este código foi concluído aqui. Nós o salvamos e está pronto para a compilação.


Agora, estamos compilando este arquivo C com o compilador GCC e criamos seu arquivo de objeto chamado “Allocex.fora ”dentro do mesmo diretório de trabalho, eu.e., "funciona".


Depois disso, executamos o arquivo de objeto recém -fabricado deste código dentro do “./”Instrução. A saída está exibindo um total de 4 valores para a variável específica, i.e., Tamanho 4 Alocação de memória para o número da variável.


Vamos mudar o número de iteração dentro do loop "para", eu.e., Alterar 4 para 5. O código a seguir foi atualizado. Vamos salvá -lo antes de compilá -lo.


Nós compilamos o código modificado com o compilador GCC para substituir seu arquivo de objeto também.


Na execução, temos a falha de segmentação. É porque estamos inicializando o tamanho da variável para 5 e usando o “<” sign to iterate the variable “Number” up to 5 which are a total of 6 memory locations, i.e., should be a total of 5.

Exemplo 02

Vamos dar outro exemplo para atribuir a memória lançada periodicamente à pilha de ponteiros. Temos usado os mesmos cabeçalhos com a adição do “stdlib.H ”cabeçalho. O método principal () foi criado com a declaração de algumas variáveis ​​e um ponteiro. As instruções Printf e Scanf são usadas para exibir e obter o número de entrada do usuário, enquanto a função aloca () estará alocando a memória na variável de ponteiro "número" usando esse número específico adicionado por um usuário. Se a memória atribuída à variável "número é nulo", eu.e., Nenhuma memória alocada, então o printf () exibirá alguma mensagem de erro relacionada a ele. Mais a função de saída (0) encerrará este programa.

O loop "for" está usando a função Printf para exibir o número atual do índice e pede que você insira o valor de um índice específico usando a função Scanf. Independentemente do valor que você acrescentou, ele será incrementado pelo número do índice e salvo para a variável "soma", a função printf () será exibida a "soma" de todas as iterações.


Nós o compilamos e criamos seu arquivo de objeto.


Executou seu arquivo de objeto e está pedindo o tamanho da alocação de memória, eu.e., 4. Total de 4 valores foram adicionados pelo usuário e resumidos pelo programa e exibidos abaixo:

Conclusão

É tudo sobre o uso da função aloca () para atribuir o espaço livre a uma variável específica, especialmente algumas pilhas. Você pode ver que não usamos a função “livre ()“ para liberar o espaço alocado, como costumamos fazer na função malloc ().