8 Stimmen

Was schneller ist: Leerer Funktionsaufruf oder If-Anweisungen?

Ich habe einen Ringpuffer implementiert, um Datenstrukturen fester Größe wie eine Warteschlange zu speichern. Dieser Ringpuffer wird mit drei Parametern initialisiert:-

/*
 * Initialize the ring buffer.
 * @capacity Max capacity of ring buffer.
 * @item_size Fixed size of item that will be put in this circular buffer.
 * @item_cleaner Clean callback, NULL if cleanup not required.
 */
ringbuf*
ringbuf_create(size_t capacity, size_t item_size, clean_up_cb item_cleaner)

Mein Ringspeicher ist immer in wrapping Modus, was bedeutet, dass das letzte Element immer ersetzt wird, wenn ein neues Element in den vollen Ringspeicher eingefügt wird. Da auch dynamisch zugewiesene Objekte in diesen Puffer eingefügt werden können, verweist der Ringpuffer auf eine Aufräumfunktion, um die Elemente freizugeben, wenn sie ersetzt oder gelöscht werden. Gleichzeitig kann diese Rückruffunktion aber auch NULL (wenn keine Aufräumarbeiten erforderlich sind). Überall in meinem Code habe ich Anweisungen wie diese:-

if(buffer->callback != NULL)
   buffer->callback(item);

Um diese zu verhindern if Anweisung lege ich eine leere Stub-Funktion an, wenn der Benutzer keine Callback-Funktion bereitstellt. Das verhindert, dass ich jedes Mal prüfen muss, ob die Rückruffunktion NULL oder nicht.

Mit diesem Ansatz sieht mein Code für mich ordentlich aus. Aber ich bin mir nicht sicher, welche der beiden Methoden schneller ist. Wie sieht es auf Assembly-Ebene aus? empty function call y if statement in Bezug auf die Geschwindigkeit? Sind sie gleichwertig?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X