2017-01-08 5 views
0

Also im Grunde habe ich ein Programm in C geschrieben, das aus ein paar .c Dateien besteht. Die Make-Datei für sie sieht wie folgt aus:Können wir NDEBUG für Assemblydateien verwenden?

CC=gcc 
CFLAGS=-I. 
DEBUGFLAGS=-D NDEBUG -O3 
default: all 

all: fib.o bigint.o bigintadd.o 
    $(CC) $(DEBUGFLAGS) -o fib fib.o bigint.o bigintadd.o 

fib.o: fib.c bigint.h 
    $(CC) $(DEBUGFLAGS) -c fib.c -o fib.o $(CFLAGS) 

bigint.o: bigint.c bigint.h bigintprivate.h 
    $(CC) $(DEBUGFLAGS) -c bigint.c -o bigint.o $(CFLAGS) 

bigintadd.o: bigintadd.c bigint.h bigintprivate.h 
    $(CC) $(DEBUGFLAGS) -c bigintadd.c -o bigintadd.o $(CFLAGS) 

Es funktioniert alles gut, aber ich entschied bigintadd.c in Baugruppe neu zu schreiben. Wenn ich das modifizierte Programm starte, dauert es jedoch zweimal mehr, bis es ausgeführt wird. Ich frage mich, ob ich NDEBUG für .s Datei im Makefile hinzufügen kann? Wenn nicht, dann gibt es irgendwelche Optionen, die mir helfen können, die Ausführungszeit zu verbessern? Die Make-Datei für das Programm mit bigintadd.s statt bigintadd.c:

CC=gcc 
CFLAGS=-I. 
DEBUGFLAGS=-D NDEBUG -O3 
default: all 

all: fib.o bigint.o bigintadd.o 
    $(CC) $(DEBUGFLAGS) -o fib fib.o bigint.o bigintadd.o 

fib.o: fib.c bigint.h 
    $(CC) $(DEBUGFLAGS) -c fib.c -o fib.o $(CFLAGS) 

bigint.o: bigint.c bigint.h bigintprivate.h 
    $(CC) $(DEBUGFLAGS) -c bigint.c -o bigint.o $(CFLAGS) 

bigintadd.o: bigintadd.s bigint.h bigintprivate.h 
    as bigintadd.s -o bigintadd.o $(CFLAGS) 
+3

Das bedeutet nur, dass Sie schlechteren Code als der Compiler geschrieben haben;) 'NDEBUG' wird nicht helfen (haben Sie es versucht?) – Jester

+3

*" Ich frage mich, ob ich NDEBUG für .s-Datei im Makefile hinzufügen kann "* - Wie soll ein C-Präprozessor-Makro Assembler-Dateien beeinflussen? Es tut mir leid, dies zu sagen, aber der Grund, warum es langsamer ist, liegt darin, dass Sie nicht so gut im Schreiben von Assemblierungen sind wie Ihr Compiler. Die meisten Menschen sind nicht. – StoryTeller

+0

Die einzige Möglichkeit, das Programm schneller laufen zu lassen, besteht darin, meinen Assemblercode zu optimieren, richtig? – Artjom

Antwort

0

Also, was ich verstand, dass die C Präprozessormakro NDEBUG nicht Baugruppendateien nicht beeinträchtigt. Daher ist es unmöglich, es schneller laufen zu lassen, indem man im Makefile etwas hinzufügt. Der einzige Weg, der vielleicht funktioniert, ist, den bigintadd.s Code selbst zu optimieren. Danke allen, die geholfen haben!

+1

'NDEBUG' lässt C-Code auch nicht schneller laufen. Es aktiviert den Optimierer nicht auf magische Weise. Sie müssen diesen Schalter angeben, etwa "-O2" oder "-O3", der automatisch "NDEBUG" definiert. Es gibt keine Optimierungseinstellungen für Ihren Assembler. Es fügt den Code genau so zusammen, wie Sie ihn geschrieben haben. Wenn dieser Code nicht optimal ist, ist auch die Ausgabe nicht optimal. Sehr unwahrscheinlich, dass Sie besser als der Compiler können. Wenn Sie etwas haben, das im Ballpark ist und die richtigen Ergebnisse liefert, stellen Sie eine neue Frage über die Optimierung auf [CodeReview.SE]. Das macht immer Spaß. –

+0

@CodyGray "NDEBUG macht C-Code nicht schneller, entweder" .. Vielleicht habe ich Sie falsch verstanden, aber C-Code ohne NDEBUG-Parameter dauert 10 Mal mehr (der Zweck des Programms ist es, Fibonacci-Nummern zu finden und ich teste es on fib (500000) – Artjom

+0

Das ist ein Unfall.Was Sie tun sollten, ist die Optimierung.Lesen Sie den Rest des Kommentars. –

Verwandte Themen