inline的語意有時候有點模糊,其實主要因該是在最佳化的時候的解釋方式,compiler會試著將inline直接展開,也就是類似MACRO,好處是不會需要處理stack frame,這表示效能將會提升,同時大多數的書籍建議inline不宜過大,這樣才不會導致text區段太過肥大,聰明一點的compiler也會自行將肥大的inline變成function,所以這才導致了inline的語意有些模糊。同時,inline也可能因為展開的關係從symbol table移除,這樣一來在gdb不能使用b function_name,必須直接使用行號,這樣的小問題。
最佳化的技巧很多,有的compiler會將function的parameter直接放到register上面,這樣可以加速處理速度同時節省stack frame,當然會面臨到參數個數跟register個數的問題,其實有時候還會引發concurrency的問題,比方說,在平行處理的時候,最佳化有可能因為將變數對應到register,導致本來用來做critical section判斷的variable,但是兩個thread擁有不同的register,所以程式怎樣看都沒問題,但是執行起來就有問題,這樣的bug非常難以找到
沒有留言:
張貼留言