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 07- computador 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
Tags
Linguagem C ANSI