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...
Nenhum comentário foi encontrado.