Tempo de Vida
"Tempo de vida" é o período durante a execução de um programa no qual existe uma função ou variável.A duração do armazenamento do identificador determina sua vida útil.
Um identificador é declarado com o especificador de classe de armazenamentoestático tem a duração do armazenamento estático. Identificadores com duração de armazenamento estático (também chamado de "global") têm o armazenamento e um valor definido para a duração de um programa.Armazenamento é reservado e o valor armazenado do identificador é inicializado somente uma vez, antes da inicialização do programa.Um identificador declarada com externo ou interna ligação também tem a duração do armazenamento estático (consulte ligação).
Um identificador declarados sem a estático o especificador de classe de armazenamento tem duração de armazenamento automático, se ela for declarada dentro de uma função.Um identificador com duração de armazenamento automático (um "identificador de local") tem um valor definido somente dentro do bloco em que o identificador é definido ou declarado e armazenamento.Um identificador automático é alocado a novo armazenamento cada vez que o programa entrar nesse bloco, e ele perde seu armazenamento (e seu valor) quando o programa sai do bloco.Identificadores declarados em uma função com nenhuma ligação também têm duração de armazenamento automático.
As regras a seguir especificam se um identificador tem global (estático) ou o tempo de vida do local (automática):
Todas as funções têm tempo de vida estático.Por isso eles existissem em todos os horários durante a execução do programa.Identificadores declarado no nível externo (ou seja, fora de todas as bloqueia no programa do mesmo nível de definições de função) sempre tem tempos de vida globais (estáticos).
Se uma variável local tem um inicializador, a variável é inicializada sempre que ele for criado (a menos que ele é declarado como estático).Parâmetros da função, também, ter tempo de vida local.Você pode especificar o tempo de vida global para um identificador em um bloco, incluindo o estático o especificador de classe de armazenamento na sua declaração.Uma vez declarado estático, a variável reterá seu valor de uma entrada do bloco para a próxima.
Embora um identificador com um tempo de vida global existe durante a execução do programa de origem (por exemplo, uma variável declarada externamente ou uma variável local declarada com o estático palavra-chave), ele pode não estar visível em todas as partes do programa.Consulte escopo e visibilidade para obter informações sobre a visibilidade e consulte Classes de armazenamento para uma discussão sobre o especificador de classe de armazenamento nonterminal.
É possível alocar memória conforme necessário (dinâmico) se criado através do uso de rotinas de biblioteca especial, como malloc.Como a alocação de memória dinâmica que usa as rotinas da biblioteca, ele não é considerado parte da linguagem.Consulte o malloc funcionar no Referência da biblioteca de tempo de execução.