Toegang in een statisch toegewezen array VS die via een pointer toegang krijgt tot een statisch toegewezen array

Ik moet het aantal strings opslaan (ze zullen constant blijven en niet worden gewijzigd), in een array en ze vele malen benaderen, we willen zo snel mogelijk opzoeken. Welke van de onderstaande opties geeft snellere toegang:

Benadering 1:

const char* string_literal[] = {"Test1","Dummy","Dummy","Test2","Test3","Dummy"};//      storing as string literals
... ... ... ...
... ... ... ...
const char* string_literal1000[]= {"Beta1","Beta2","Beta3"};

Benadering 2:

const char test1ptr[] = "Test1",
const char test2ptr[] = "Test2",
const char test3ptr[] = "Test3",
const char dummyptr[] = "Dummy",


const char* string_ptr1 [] = {test1ptr,dummyptr,dummyptr,test2ptr,test3ptr,dummyptr};//storing as pointers
... ... ...
const char* string_ptr1000[] = {"Beta1","Beta2","Beta3"};

Of; is het Approach1 en Approach 2 resulteert in dezelfde prestaties?

Notitie:

  1. Ik heb ongeveer 1000 records (bijvoorbeeld string_ptr1, sting_ptr2 etc. of string_literal1, string_literl2 etc.) geconverteerd met gemiddeld 20 strings (bijv. "test1", test2 "enz.).
  2. "Dummy" verschijnt alleen bij weinig records.
0
Overal waar je const char * hebt, bedoel je waarschijnlijk const char * const .
toegevoegd de auteur aschepler, de bron
string_literal1000 zou niet compileren
toegevoegd de auteur sehe, de bron
En geen van beiden zou string_ptr1000 zijn, en bovendien, dit is echt de laatste plek in de wereld waar je op zoek moet zijn naar prestatieshits.
toegevoegd de auteur Seth Carnegie, de bron
Voor zover ik weet, als de compiler eenmaal is geoptimaliseerd, spuugt het dezelfde code uit.
toegevoegd de auteur netcoder, de bron
Dit is de meest belachelijke micro-optimalisatie die ik ooit heb gezien. Stop met het verspillen van je tijd en programmeer gewoon.
toegevoegd de auteur Benjamin Lindley, de bron
het compilatieprobleem gecorrigeerd. bedankt voor je reactie. Ik zal hier niet zoeken naar optimalisatie.
toegevoegd de auteur learningstack, de bron
@aschelper: bedankt voor het wijzen van ontbrekende const.
toegevoegd de auteur learningstack, de bron

1 antwoord

string_literal1000 zou niet compileren.

Eenvoudig antwoord: zeg dezelfde prestatie (aangezien het toewijzingspatroon identiek is).

Het is echter wel grappig dat je wilt dat we snelheden vergelijken, terwijl je niet eens je gebruikspatroon (en) laat zien.

Nu, dat gezegd hebbende, kan ik me situaties voorstellen waarin je een beetje zou kunnen optimaliseren met het volgende patroon: IFF je weet de lengte van de grootste invoer (ze lijken nogal klein), je zou de hele tafel kunnen optimaliseren door deze in een enkele char te verpakken [ ], met de individuele tekenreeksen uitgelijnd en opgevuld met een mooi aantal bytes (zeg 16 of 32 voor de tekenreeksen die in het OP worden getoond).

Zonder verdere informatie over de feitelijke codescenario's zou het verkeerd zijn om een ​​dergelijke benadering (IMO) aan te bevelen.

1
toegevoegd