6 Stimmen

Strukturen in C, sind sie effizient?

Ich lese gerade einen solchen C-Code:

double function( int lena,double xa,double ya, double za, double *acoefs, ...,
                 int lenb,double xb,double yb, double zb, double *bcoefs, ...,
                 same for c,
                 same for d )

Diese Funktion wird im Code mehr als 100.000 Mal aufgerufen, sie ist also leistungsentscheidend.

Ich versuche, diesen Code zu erweitern, aber ich möchte wissen, ob es effizient ist oder nicht (und wie viel dies die Geschwindigkeit beeinflusst), um alle Parameter in einer Struktur wie diese zu kapseln

struct PGTO { int len; double x,y,z ; double *acoefs }

und greifen dann auf die Parameter in der Funktion zu.

11 Stimmen

Einfacher Weg, das herauszufinden: Profil und Test

1 Stimmen

Der kompilierte Code sollte für die x86- und ARM-Standardaufrufkonvention gleich sein.

0 Stimmen

Ist die ... die varargs angeben, oder haben Sie einige Parameter weggelassen?

0voto

Jay Punkte 23175

Am besten ist es, ein Profil zu erstellen und zu testen.

Aber eine Sache, weniger Parameter werden auf den Stack kopiert, wenn Sie einen Zeiger auf struct übergeben. Außerdem könnte Ihr Funktionsaufruf ordentlicher aussehen.

0voto

Tuomas Pelkonen Punkte 7667

Ja, das sind sie. Ich würde eine Million Dollar darauf wetten, wenn ich so viel hätte, dass der Leistungsunterschied vernachlässigbar ist.

0voto

edgar.holleis Punkte 4563

Die Übergabe einer Struktur oder der Argumentliste sollte keinen großen Unterschied machen. Die Aufrufkonvention verlangt, dass beides als Wert und über den Stack übergeben wird (außer die Funktion kann als static ).

Sie könnten den Code umgestalten, um Pass-by-Reference (Übergabe eines Zeigers auf eine Struktur) zu ermöglichen. Aber das ist wahrscheinlich eine große Umgestaltung, die Ihren Code komplizierter und weniger lesbar machen wird.

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