Optimizarea lui Iocan

Nemultumit de apatia ce cuprinsese ograda expertilor, Ovidiu “MVP” Cucu s-a decis intr-o zi sa-si revergoreze un pic enoriasii cu “o mica tema pentru acasa, pentru interviu, or just for fun“. Arhanghelul Gabriel, care de la dictarea Coranului si birfele de la maternitatea din Ierusalim n-a mai produs cine stie ce material, s-a sculat de pe laurii pe care se odihnea si a venit cu mare har in intimpinarea initiativei, slobozind in mintea lui Ovidiu saminta unei mari idei: copierea optima a unui bloc dintr-o parte intr-alta. Precum un Heinz blinker 18 grame argint, aparenta simplitate a acestui exercitiu a atras o gloata multiculturala de experti care Au Crezut Ca Pot.

Primul care a ridicat manusa a fost MVP Dragos Cojocari, care dupa doua etape de verificat pointerii sa nu fie null, S-a odihnit:

Stiu ca se mai poate numa sa imi dai timp sa ma uit un pic in Knuth.

Pentru prima data in istoria fara de pata a publicatiei noastre, nu ne dam seama daca post-ul lui Dragos este un misto subtil sau un atac sincer la persoana lui Knuth. Din acest motiv ne declinam competenta in privinta sa si va lasam pe voi cititorii nostri numerosi sa trageti ce concluzie vreti, ca-n filmele alea de arta.

In privinta urmatoarei contributii nu exista insa dubii. In orice discutie respectabila despre copiatul memoriei trebuie sa apara un cautator pe Google dornic de afirmare care sa arate multimii cit de erudit este mentionind manevra lui Duff. In comunitatea expertilor rolul acesta a fost asumat temporar de catre Cryogenic, care in timpul liber confunda HPC-ul cu PHP-ul. Confruntat cu faptul ca sodomizarea switch-ului nu se descurca stralucit pe procesoarele homofobe din zilele noastre, Cryogenic si-a dublat gradul de eruditie, gasind nodul in papura lui memcpy():

Felicitari, ai transformat o functie generica de copiat bytes in …. memcpy.

[…]

Din pacate memcpty nu-ti garanteaza “ordinea” in care vor fi copiati bytii, iar asta e o problema in anumite cazuri, de exemplu cand se foloseste mmio (memory mapped IO).

Citeva post-uri mai jos el a mai cautat un pic pe Google si a gasit singur, fara ajutorul nimanui si in premiera in discutia de fata, solutia pe care tocmai o combatuse.

Dupa Cryogenic a intervenit Silviu, Ardelean HD care si-a construit singur cerul. In piesa noastra, rolul cerului este jucat de operatorul sizeof, iar optimizarea consta in faptul ca nu se copiaza memoria decit daca nu-i nimic de copiat:

void copy_chars(char* dest, const char* src,
 unsigned int count)
{
   if ((NULL ==dest) && (NULL == src) &&
      (count <= sizeof(dest))
   {
      memcpy(dest, src, count);
   }
}

Polemica s-a mai zvircolit o ultima data si a sucombat dupa ce Andreas a avertizat compilatorul sa puna memcpy-ul inline, “or else”:

Asteptand raspunsul lui Ovidiu, subscriu la varianta cu folosirea lui memcpy cu observatie ca aceasta trebuie facuta inline.

inline void* memcpy(void* dest,const void*src,size_t count);

Intr-un oribil deja-vu pentru Silviu, compilatorul a abordat o pozitie passive-agressive, ignorind si Regula 0 si ultimatumul prezentat.

Discutia s-a terminat in stilul California Dreamin’, dar din pacate nu din cauza ca l-a calcat masina pe Ovidiu Cucu.

Tags: , , , , , , , ,

3 Responses to “Optimizarea lui Iocan”

  1. Dijkstra Says:

    Am ras cu lacrimi.
    Parca ma uit la pacientii unui de nebuni cand citesc pe codeexpert.ro.

  2. jos8cal Says:

    Vezi si tu ca e greu sa scapi de Silviu, Ardelean oricit ai incerca sa te distantezi de el.

  3. Spint Says:

    … optimizarea consta in faptul ca nu se copiaza memoria decit daca nu-i nimic de copiat …
    Si eu am ras cu lacrimi! Sunteti cei mai tari in povestiri dupa acest clasic in viata :)))))))))

Leave a Reply

Optionally add an image (JPEG only)