2017-06-16 4 views
2

このような大量のコードをインライン化することは良い考えではありませんが、意図的にすべてのSTLコードをインライン化する方法があることを願っています。例えば、指定されたすべてのSTLコードを意図的にインライン化する方法は?

#include <list> 
#include <iostream> 

std::list<int> list; 
/* SKIPPED : INSERT RANDOM NUMBERS */ 
list.sort(); // forcibly inlined 

for (int &num : list) 
    std::cout << num << std::endl; 

目標は、私は関係なく、それがどのようにばかげて、彼らがどのように小規模または大規模なメンバ関数すべての可能なSTL関数呼び出しのオーバーヘッドを排除しないことがあるということです。すべてのSTLソースコードを変更することができます。 gcc 6.2.0またはclang 3.0のいずれかでこれを成功させるには?

+5

このような理由がありますか?これは私に[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように見えるためです。 – Rakete1111

+4

'11001'、' 0xdeadbeef'、 'hdytrvivcewxtr'は_codes_ですが、あなたが話しているのは_code_です。また、STLはなく、C++標準ライブラリ(別名_stdlib_)しかありません。 – ForceBru

+0

@ Rakete1111私は、コールオーバーヘッドの影響をベンチマークするための研究を行っています。 –

答えて

1

デフォルトでは、gccは、インライン化によって20%(要因1.2)で発生したコンパイル単位があれば、全体的な成長を制限します。 500%であろう許容増殖、すなわち、因子が6実際に、インライン化の挙動を制御する、より多くのパラメータがある場合、これはコンパイラオプション

--param inline-unit-growth=500 

で変更することができます。実際にドキュメント(またはマニュアルページ)を勉強し、これらのパラメータを適切に設定する必要があります。その他は

--param max-inline-insns-single=number 
--param max-inline-insns-auto=number 
+0

ありがとうございました。できます。 [GCC 6.2.0 Options Here](https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/Optimize-Options.html) –

関連する問題