2012-02-19 11 views
3

Library.hC18:未使用のライブラリ関数はEPROMの領域を消費しますか?

void Foo1(void);  // Unused 
int Foo2(int, int); // Used 
char Foo3(char);  // Unused 

main.cの

// ... 
#include "Library.h" 
// ... 
void main(void) 
{ 
    int ret; 
    // ... 
    ret = Foo2(3, 7); 
    // ... 
} 

私はそれで関数定義をたくさん持っているライブラリファイルを持っています。使用されていないライブラリ関数のために生成されたマシンコードサイズが増加するか?あるいは、コンパイラは未使用の関数を無視してコードを最適化しますか?

IDE:MPLAB 8.43
コンパイラ:MCC18 3.34
PIC:18F2550

+3

ほとんどのリンカーは、個々の機能ではなく、オブジェクトファイル全体を省略することができます。見つけ出す最も簡単な方法はそれを試してみることです。 –

+0

未使用の関数は、リンカがゴミ箱でない限り、実行可能ファイルに_not_追加されません。つまり、リンカの中にはゴミ箱があります。 – Lundin

答えて

2
  1. チェック。逆アセンブラまたは他のツールを使用して出力バイナリを調べ、見つけてください。
  2. リンカーにデッドストリッピングのオプションがあるかどうかを調べます。
0

libのC18メンバーの場合は.oなので、リンクにメンバーの関数が1つ必要な場合は、全体の(すべての関数から).oが最後のbin/hexコードに含まれます。

関連する問題