Wenn Sie denselben Code verwenden, ändert sich durch einfaches Ändern des Compilers (von einem C-Compiler zu einem C ++ - Compiler), wie viel Speicher zugewiesen wird. Ich bin mir nicht ganz sicher, warum das so ist und würde es gerne besser verstehen. Bisher ist die beste Antwort, die ich erhalten habe, "wahrscheinlich die E / A-Streams", was nicht sehr beschreibend ist und mich über den Aspekt "Sie zahlen nicht für das, was Sie nicht verwenden" in C ++ wundert.
Ich verwende die Clang- und GCC-Compiler, Versionen 7.0.1-8 und 8.3.0-6. Mein System läuft auf Debian 10 (Buster), spätestens. Die Benchmarks werden über das Valgrind-Massiv durchgeführt.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
Der verwendete Code ändert sich nicht, aber ob ich als C oder als C ++ kompiliere, ändert die Ergebnisse des Valgrind-Benchmarks. Die Werte bleiben jedoch über alle Compiler hinweg konsistent. Die Laufzeitzuordnungen (Peak) für das Programm lauten wie folgt:
- 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)
Zum Kompilieren verwende ich folgende Befehle:
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
Für Valgrind führe ich valgrind --tool=massif --massif-out-file=m_compiler_lang ./compiler-lang
jeden Compiler und jede Sprache aus und ms_print
zeige dann die Peaks an.
Mache ich hier etwas falsch
try
Blocks auf Kosten eines größeren Speicherbedarfs, möglicherweise mit einer Sprungtabelle oder Ähnlichem, nicht beeinträchtigt wird. Versuchen Sie vielleicht ausnahmslos zu kompilieren und sehen Sie, welche Auswirkungen dies hat. Bearbeiten: Versuchen Sie iterativ, verschiedene C ++ - Funktionen zu deaktivieren, um festzustellen, welche Auswirkungen dies auf den Speicherbedarf hat.
clang++ -xc
statt clang
war die gleiche Zuordnung vorhanden, was stark darauf hindeutet, dass es sich um verknüpfte Bibliotheken handelt
C
Modus genau die gleiche Anzahl von Bytes und im Modus genau die gleiche Anzahl von Bytes erzeugen C++
. Haben Sie einen Transkriptionsfehler gemacht?