strchrとC++ stringのfindの速度差

find

void find(std::string &a) {

    for(int k = 0; k < 1000; k++){
        a.find('b');
    }

}

int main(void){
    std::string a;
    a.reserve(10000000);

    for(int j = 0; j < 1000; j++){
        for(int i = 0; i < 10000; i++){
            a[i + j * 10000] = 'a';
        }
        a[j * 10000] = 'b';
    }

    for(int l = 0; l < 1000; l++){
      find(a);
    }
}

strchr

void find(const char* a) {

    for(int k = 0; k < 1000; k++){
        strchr(a, 'b');
    }

}

int main(void){
    char *str;
    str = (char *) malloc(sizeof(char)*10000000);
    str[1] = 'b';

    for(int j = 0; j < 1000; j++){
        for(int i = 0; i < 10000; i++){
            str[i + j * 10000] = 'a';
        }
       str[j * 10000] = 'b';
    }
    for(int l = 0; l < 1000; l++){
      find(str);
    }
    free(str);
}

で速度比較を行った。

  strchr
  real    0m0.133s
  user    0m0.111s
  sys     0m0.021s

  find
  real    0m0.192s
  user    0m0.173s
  sys     0m0.019s

だいたい1.5倍かな? 
ただ、文字列の構築に時間がかかっている可能性もあるので、一概に比較できないのが残念なところ。
プロファイラを取ったんだが、macだとC++のシンボル名がデマングルされないみたいです。
これ、なんとかできないかなぁ?
ちなみにコンパイラはどちらもg++で、最適化オプションはなしです。