Script gerador de código fonte em ANSI C

Publicado por Roberto Gomes Borges em 03/12/2014

[ Hits: 5.907 ]

 


Script gerador de código fonte em ANSI C



Salve, prezados e prezadas colegas, nobres entusiastas, estudantes e profissionais de TI. Amantes da LIBERDADE PLENA E INCONDICIONAL.

Antes de mais nada, um pequeno aviso:

Logicamente, o script está mais direcionado a estudantes da linguagem C, em fase inicial de aprendizagem, assim como eu. Informo também que o mesmo é bem incipiente e embrionário. Obrigado!

O script gera arquivos e funções contidas nos mesmos de acordo com os valores setados nas variáveis.

Antes mesmo de iniciar o ano "novo" que bate as portas, resolvi tentar aprender um pouco de ANSI C. Ufa! Finalmente Roberto, pois bem. Logo de início, tentei ver os limites e as capacidades do compilador C, no caso o GCC, aí me deparei com termos como (HEAP, BSS, DATA, TEXT, STACK), etc, etc.

Daí veio a ideia de criar um script (Linux bash) que geraria os arquivos fontes em ANSI C. O script gerador de fonte C, mk_c_src.sh, mas para os íntimos, "O MONSTRO DEVORADOR DE SILÍCIO" (explico já o "apelido").

Poupando assim, muito trabalho de digitar o código, pois o mesmo é muito genérico, afinal queremos apenas testar os tais HEAP, BSS, DATA, TEXT, STACK, etc, etc e STRESS de CPU/Memória.

Como o título indica, o script gera arquivos e funções contidas nos mesmos de acordo com os valores setados nas variáveis. E cria também o main.c e o makefile.

Por exemplo, a variável "K" informa quantos arquivos ".c" desejamos criar, a variável "M" informa quantas funções ESTÁTICAS ou NÃO desejamos criar dentro dos arquivos ".c", obviamente a variável "STATIC_S_N", setada com os valores "S/Y/N", indica se as funções serão STATIC "S/Y" ou não "N".

O script da forma que está, gera 8 (oito) arquivos fontes, de cfn1.c até cfn8.c bem como o main.c e o makefile, sendo que cada arquivo contém 16 (dezesseis) funções NÃO ESTÁTICAS. Também são geradas variáveis, GLOBAIS, LOCAIS e ESTÁTICAS, justamente para fazer mudanças nos HEAP, BSS, DATA, TEXT, STACK, de acordo com os valores setados. Além dos estudos já citados, o binário gerado (test) também gera STRESS de CPU/Memória.

Pois o mesmo funciona da seguinte forma: main chama cfn1, que chama todas as funções nele contidas, que no final chama cfn2, e o processo continua até cfn(x) que retorna a main, consumindo CPU e Memória.

main => cfn1(Local_cfn1 ... Local_cfnx) => cfn2(...) => cfnx

Para verificar os valores de HEAP, BSS, DATA, TEXT, STACK, use readelf, size, objdump, etc. Para verificar o STRESS use top, htop, atop, etc, etc.

Variáveis das variáveis:

GLOBAIS:
  • G_CHAR_VAR => 32
  • G_INT_VAR => 32
  • G_FLOAT_VAR => 32
  • G_DOUBLE_VAR => 32

LOCAIS:
  • L_CHAR_VAR => 16
  • L_INT_VAR => 16
  • L_FLOAT_VAR => 16
  • L_DOUBLE_VAR => 16

ESTÁTICAS:
  • S_CHAR_VAR => 8
  • S_INT_VAR => 8
  • S_FLOAT_VAR => 8
  • S_DOUBLE_VAR => 8

Do procedimento:

Por exemplo: hipotético usuário (bob):

pwd
/home/bob
mkdir -p mkc/src
cp /home/bob/Downloads/mk_c_src.sh mkc/
chmod +x mkc/mk_c_src.sh
cd mkc/src
time ../mk_c_src.sh
time make -j <number of cpu cores>
time ./test

Do "apelido": fique atento quanto aos valores configurados nas variáveis do script, pois você pode gerar desde pequenos binários até o limite da arquitetura do compilador/hardware. Um verdadeiro "Monstro Devorador de Recursos".

Espero que o mesmo seja de bom proveito, mk_c_src.sh foi inteira e completamente escrito por mim, e o mesmo é 100% free/open source. Fique à vontade para fazer o que bem entender com ele.

Se por ventura eu não responder e-mails nos próximos 30 dias, é devido ao fato de estar em viagem a locais sem acesso à internet. Maravilhosamente cercado apenas pela natureza e, é claro, alguns livros do bom e velho papel. Sobre linguagem C, é claro.

Obrigado.

Enjoy...
Have a lot of fun...

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Instalando MySQL 8 no CentOS 7

Placa wireless Atheros AR5007EG/AR242x no Acer Aspire 5520 com Ubuntu Linux

Instalando XMMS a partir do fonte no Ubuntu Linux

Como remover o ambiente gráfico instalado no Ubuntu

Fedora Directory Server

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts