************************************ * Petites operations sur pointeurs * ************************************ Auteur : PeaceNuK'R Sujet : Coding Langage : C++, mais applicable a tous langages a pointeurs Niveau : Arf, je sais pas quoi mettre... "moyen" ? Connaissances "requises" : asm, pour le stockage des long en memoire, et c++ bien évidemment OS concernes: Linux et windaube //////////////////////////////// 1) Preliminaires (hum hum =;o) / //////////////////////////////// => Bon, tout d'abord, il va falloir que je dise de quoi je parle, et arrache comme je le suis, ca va pas le faire... M'enfin, on va essayer... La comparaison de chaines de caracteres a toujours ete couteuse en temps processeurs... Or, dans un systemes client/serveur (si vous savez pas ce que c, ben arretez la votre lecture, je peux rien pour vous)(nota: Fait chier, trop l'habitude des accents, grrr prof=) ... dans un systemes client serveurs, disais-je, ben on a souvent juste besoin de commandes courtes, du genre "OKAY"... Et si a chaque fois, on doit regarder chaque lettres, ca devient vite lassant, et couteux Et c'est la que les manip' de pointeurs sont amusantes... /////////////////// 2) Le vif du sujet/ /////////////////// Bon, imaginons que j'ai une fonction avec comme prototype: ==>>> bool isEqualToOKAY(char * ptr) * Une solution serais de faire un truc du genre: ==>>> bool isEqualToOKAY(char * ptr) {return !strcmp(ptr,"OKAY"); } Ouais, mais moi, j'aime pas :((( * On pourrais aussi utiliser une fonction du type bool isEqualToOKAY(char * ptr) { return (*ptr!="O" ? false : !strcmp(++ptr,"KAY")); } Ou, on teste la premiere lettre, avant d'aller plus loin Mais moi, je prefere cette solution: bool isEqualToOKAY(char * ptr) { return (*((unsigned long))ptr == 'YAKO'); } 3) Explications Ceux qui auraient deja compris peuvent passer directement au reglement par carte bancaire (lol) Bon, un peu d'asm, maintenant... Un chaine de caractere, est stockee en memoire de facon toute conne, en une suite d'octets On peux donc la comparer a un long... Mais ceux ci (sous daube et linux), sont stockes avec les bits de poids faibles en premier.. D'ou l'inversion... Sous un MAC (arf... *no comment*), on n'a pas besoin de l'inversion... Donc, il nous suffit de caster le pointeur sur un long, et basta Ptite remarque... bool isEqualToOK(char * ptr) { return (*((unsigned short))ptr == 'KO'); } Cet article n'a pas ete ecrit pour juste vous montrer cet algo, mais pour demontrer qu'on peux faire beaucoup de chose, de facon tres simple, et sans asm inline, pour optimiser un code Sur ce, bon courage a tous... PeaceNuK'R PS: ya pas de disclaimer, tout simplement paske ya pas besoin, c'est du coding, la, pas autre chose... Greetz to : Organiks Crew, RhylKim, Veinscuts, Cutikill, Hania (my love),Tipiak, Realist, etc, etc, etc... Desole, chui trop defait pour me rapeler de tous le monde ...