私は現在、すべてのサイクルが重要なプロジェクトに取り組んでいます。アプリケーションのプロファイリング中に、一部の内部ループのオーバーヘッドが非常に高いことがわかりました。これは、それらがほんの数個のマシン命令で構成されているためです。さらに、これらのループの反復回数はコンパイル時にわかります。
そこで、コピー & ペーストで手動でループを展開する代わりに、後で簡単に変更できるように、マクロを使用してコンパイル時にループを展開できると考えました。
私がイメージするのは次のようなものです:
#define LOOP_N_TIMES(N, CODE) <insert magic here>
私が置き換えることができるようにfor (int i = 0; i < N, ++i) { do_stuff(); }
:
#define INNER_LOOP_COUNT 4
LOOP_N_TIMES(INNER_LOOP_COUNT, do_stuff();)
そして、次のように展開します。
do_stuff(); do_stuff(); do_stuff(); do_stuff();
ほとんどの場合、C プリプロセッサはまだ謎に包まれているため、これを達成する方法はわかりませんが、Boost にはBOOST_PP_REPEAT
マクロがあるように見えるので、それが可能であるに違いないことはわかっています。残念ながら、このプロジェクトでは Boost を使用できません。