git » homepage.git » master » tree

[master] / archive / forums / hacker-news / raw / items / 718283.json

{"by":"jcsalterego","id":718283,"kids":[718342],"parent":718147,"text":"Looking at the C code, here are a few suggestions:<p>- __builtin_popcount() and __builtin_popcountll() are great gcc builtins which perform bit population counts, useful for hamming distances (after the XOR operation, of course). [1]<p>- avoid scanf(), which is costly. My approach was to generate a header file with the char * words[] array, and also a int words_len[] with, you guessed it, the pre-computed lengths. Then go for the memcpy() route and you're in a much better position.<p>- speaking of memcpy, gcc provides one that should be optimal in most cases, but for really short words, it might be easiest to write your own. I came across a good article on it [2] but this is what I ended up using:<p><pre><code>  void\n  c_memcpy (char * dst, char * src, size_t len)\n  {\n    __builtin_prefetch(dst, 1, 3);\n    while (len--) {\n      *dst++ = *src++;\n    }  \n  }\n</code></pre>\n[1] <a href=\"http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Other-Builtins.html\" rel=\"nofollow\">http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Other-Builtins.h...</a><p>[2] <a href=\"http://www.embedded.com/columns/technicalinsights/19205567\" rel=\"nofollow\">http://www.embedded.com/columns/technicalinsights/19205567</a>","time":1248288116,"type":"comment"}