Linguagem C padrão ANSI

Um pouco sobre a história da linguagem C

Criado na década de 70, mais precisamente no ano de 1972 pelo cientista Denis Ritchie nos laboratórios de Bell, uma Linguagem C que teria o intuito de reescrever de forma portável todo o sistema operacional UNIX, anteriormente escrito em Assembly. Sua estrutura e seu nome oriundos de uma linguagem anterior chamada de "B", desenvolvida por Ken Thompson, simplificando a linguagem de programação BCPL, escrita em 1966 por Martin Richards, uma linguagem estruturada e compilada, fazendo possível a criação de blocos de código

Sobre suas características

Sua linguagem bastante flexível quanto ao modo de escrita,  é compilada e convertida em código Assembly pelo programa montador sendo depois convertida para código objeto para ser processada. Esse tipo de linguagem é bem mais velozes que as interpretadas, visto que o código de máquina já fica em uma linguagem apropriada para o processador ler e realizar suas atividades.  Seu código fonte é processado todas as vezes que um programa ou aplicação é executada.

Figura 06 Ken Thompson e Dennis Ritchie
    
Fonte: https://lugarcerto.wordpress.com/tag/python/

O Unix e o computador PDP-11

Em 1971 o Unix foi escrito para o computador PDP-11. Em 1973 o Unix é reescrito em linguagem C pelo próprio criador da linguagem, Dennis Ritchie. O uso do Unix dentro da AT&T cresceu tanto que foi criado um grupo de suporte interno para o sistema, que cediam cópias do código fonte para fins educacionais em universidades.

    Figura 07computador PDP-11
Fonte:  https://www.gratispng.com/png-k7uksm/


Vantagens e Desvantagens da utilização

Vantagens
  • Multiplataforma seu código C ANSI possui portabilidade em diversos sistemas como  Unix, Windows, Mac e demais plataformas. 
  • A linguagem C ainda é uma das mais populares do mercado;
  • Não possuem muitos comandos;
  • Paradigma procedural;
  • Definição e declarações simples de variáveis; 
  • Possui tipos de dados bem definidos e simples, boa parte dos comandos podem estar interagindo diretamente com bits  e bytes
  • Acesso direto a memória.

Desvantagens
  • Não possui programação orientada a objeto, acesso a Classes e Objetos, isso se torna possível na linguagem C++ que é uma extensão da Linguagem , mas não fornecem classes nativas com funcionalidades prontas para serem utilizadas
  • Não é extremamente segura devido a seus códigos sequenciais.
  • Não possui um gerenciador de memória como o Garbage Collection (coleta de lixo) que temos no Java O gerenciamento de memória fica a cargo do programador, é preciso ter certos cuidados para que não aja transbordamentos de memória, podendo travar o processador (Stack Overflow). Uma variável declarada não pode ser eliminada.
  • Não permite a utilização em multiThreding, execuções simultâneas.
  • A Linguagem C não foi projetada para Web, mais é perfeitamente possível utilizar algumas bibliotecas para permitir tais recursos.

Gerenciamento de memória

Em relação a memória, algo preocupante é o vazamento de memória "memory leak" podendo resultar em perdas de memória
Um bit é a menor unidade de informação que podemos usar, podendo assumir valores 0 ou 1.  Usamos o termo byte para designar uma sequência de 8 bits. A memória é como um arranjo linear de bytes, organizados sequencialmente. Temos o byte que ocupa a posição 1, outro a posição 2, e assim por diante, até esgotarmos a capacidade física da memória, composta exponencialmente 2^n .  A Linguagem C não foi projetada para ser uma linguagem mult-thread ou para Web, mais é possível utilizar algumas bibliotecas para permitir tais recursos. 
Para evitarmos esse transbordamento e utilizamos algumas técnicas, além dos modificadores de tipo incluímos os modificadores de acesso ou qualificadores  Const e Volatile o que chamamos de mapeamento de memória geralmente utilizando ponteiros.

  • const: utilizado para declarar uma constante, isto é, uma variável que não pode ser modificada durante a execução do programa. Tais variáveis podem ser armazenadas em uma memória de apenas leitura;
  • volatile: utilizado para indicar ao compilador que a variável especificada pode ser alterada por eventos externos, isto é, o conteúdo da variável pode ser alterado de forma não explícita. Por exemplo, uma rotina de interrupção pode alterar o valor de uma variável que é utilizada em outro procedimento.

Fragmentação de memória "Memory leak"

 A função malloc() utiliza-se de um pedaço de memória onde é alocado. Se o projeto criado exceder as chamadas a função malloc(), podemos ter sérios problemas com essa utilização da memória, isso poderá ficar fragmentado em pequenos pedaços alocados para a aplicação. Depois as rotinas de alocação terão dificuldades de encontrar esses “pedaços de memória" que atendem às novas chamadas malloc(). A forma como ocorre esta fragmentação dependente da biblioteca ou do sistema operacional responsável pela alocação dessa memória.
Memory leak: Se alocar regiões de memória com malloc() e não liberar estas regiões com o free(), criará um senário conhecido como memory leak. Com isso terá problemas de desempenhos na aplicação, ocorrer travamentos, reboot automáticos entre outros problemas. 
A memória é utilizada pelos processos e gerenciada pelo Sistema Operacional, sua responsabilidade é alocar pedaços ou fragmentos da memória para cada processo de acordo com o tamanho necessário para execução do programa.

Referências

Prado, Sergio. Memory leak em linguagem C, https://sergioprado.org, 2010. Disponível em https://sergioprado.org/memory-leak-em-linguagem-c/: Acesso em 01 de fevereiro de 2022.

Garcia, Fernando. Modificadores de Acesso na Linguagem C, https://www.embarcados.com.br, 2016. Disponível em https://www.embarcados.com.br/modificadores-de-acesso-na-linguagem-c/: Acesso em 03 de fevereiro de 2022.

Diana, Daniela. História e Evolução dos Computadores, https://www.todamateria.com.br, [s.d.]. Disponível em https://www.todamateria.com.br/historia-e-evolucao-dos-computadores/: Acesso em 03 de fevereiro de 2022.

Evolução dos computadores, https://www.diferenca.com, [s.d.] [s.n.]. Disponível em https://www.diferenca.com/evolucao-dos-computadores: Acesso em 03 de fevereiro de 2022.

Evolução dos computadores,https://computersciencestudies.wordpress.com, 2011 [s.n.]. Disponível em https://computersciencestudies.wordpress.com/2011/03/08/gerenciamento-memoria-particoes: Acesso em 03 de fevereiro de 2022

Luis E. S. Pinheiro

Computer Engineer, Postgraduate WEB Development, System Analyst, Technician in industrial automation

Postar um comentário

Postagem Anterior Próxima Postagem