Tag: 常量折叠

gcc复合常数折叠

似乎gcc对复杂的常量折叠有一些限制。 这是一个例子: static inline unsigned int DJBHash(const char *str) { int i; unsigned int hash = 5381; for(i = 0; i < strlen(str); i++) { hash = ((hash << 5) + hash) + str[i]; } return hash; } int f(void) { return DJBHash("01234567890123456"); } 当使用-O3优化级别(gcc 4.8)运行时,它很好地展开了DJBHash中的循环,并在编译期间计算该字符串的哈希值。 但是,当字符串长一个字符时, return DJBHash(“012345678901234567”); 它不再折叠它并使用条件跳转指令生成循环。 我想将任意长度的文字字符串折叠为其哈希值作为编译时常量。 这可以吗? 澄清 我的问题是关于gcc的常量折叠优化(参见标题 – […]