Ao usar o mesmo código, simplesmente alterar o compilador (de um compilador C para um compilador C ++) alterará a quantidade de memória alocada. Não tenho muita certeza do porquê disso e gostaria de entender mais. Até agora, a melhor resposta que recebi é "provavelmente os fluxos de E / S", o que não é muito descritivo e me faz pensar sobre o aspecto do C ++ como "você não paga pelo que não usa".
Estou usando os compiladores Clang e GCC, versões 7.0.1-8 e 8.3.0-6, respectivamente. Meu sistema está sendo executado no Debian 10 (Buster), mais recente. Os benchmarks são feitos via Valgrind Massif.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
O código usado não muda, mas, se eu compilar como C ou C ++, ele altera os resultados do benchmark Valgrind. Os valores permanecem consistentes entre os compiladores, no entanto. As alocações de tempo de execução (pico) para o programa são as seguintes:
- GCC (C): 1.032 bytes (1 KB)
- G ++ (C ++): 73.744 bytes, (~ 74 KB)
- Clang (C): 1.032 bytes (1 KB)
- Clang ++ (C ++): 73.744 bytes (~ 74 KB)
Para compilar, eu uso os seguintes comandos:
clang -O3 -o c-clang ./main.c
gcc -O3 -o c-gcc ./main.c
clang++ -O3 -o cpp-clang ./main.cpp
g++ -O3 -o cpp-gcc ./main.cpp
Para o Valgrind, eu corro valgrind --tool=massif --massif-out-file=m_compiler_lang ./compiler-lang
em cada compilador e idioma, depois ms_print
para exibir os picos.
Estou fazendo algo errado aqui?
try
bloco às custas de uma maior quantidade de memória, talvez com uma tabela de salto ou algo assim. Talvez tente compilar sem exceções e ver qual o impacto que isso tem. Edit: De fato, iterativamente, tente desabilitar vários recursos do c ++ para ver qual o impacto que isso tem sobre o espaço ocupado pela memória.
clang++ -xc
em vez de clang
, a mesma alocação estava lá, o que sugere fortemente a sua função bibliotecas vinculadas
C
modo e exatamente o mesmo número de bytes C++
. Você cometeu um erro de transcrição?