パフォーマンスが重要なアプリケーションに c++ を使用することを検討しています。C と C++ の実行時間は同等になると思いました。ただし、C++ 関数は、同等の C スニペットを実行するのに 4 回以上かかることがわかります。
逆アセンブルを行ったとき、end()、++、!= がすべて関数呼び出しとして実装されていることがわかりました。それら (少なくともそれらの一部) をインラインにすることは可能ですか?
C++ コードは次のとおりです。
typedef struct pfx_s {
unsigned int start;
unsigned int end;
unsigned int count;
} pfx_t;
typedef std::list<pfx_t *> pfx_list_t;
int
eval_one_pkt (pfx_list_t *cfg, unsigned int ip_addr)
{
const_list_iter_t iter;
for (iter = cfg->begin(); iter != cfg->end(); iter++) {
if (((*iter)->start <= ip_addr) &&
((*iter)->end >= ip_addr)) {
(*iter)->count++;
return 1;
}
}
return 0;
}
そして、これは同等の C コードです。
int
eval_one_pkt (cfg_t *cfg, unsigned int ip_addr)
{
pfx_t *pfx;
TAILQ_FOREACH (pfx, &cfg->pfx_head, next) {
if ((pfx->start <= ip_addr) &&
(pfx->end >= ip_addr)) {
pfx->count++;
return 1;
}
}
return 0;
}