1

追加のヘッダー ファイルを含めると、必要な RAM サイズが増加しますか? たとえば、次の場合、より多くの RAM が必要に#include <stdio.h>なり#include <string.h>ますか?

CNU C コンパイラを使用して組み込みシステム ソフトウェアを作成しているので、必要な RAM をできるだけ最小限に抑えたいと考えています。

4

6 に答える 6

1

少なくとも標準ライブラリのヘッダーについて話しているときは、本当に聞きたいことに対する答えはおそらく「いいえ」です。それらを含めても、実行可能ファイルのサイズやメモリ フットプリントに違いはありません。それにもかかわらず、私は反対の反応を示さずにはいられません。

インクルードファイルの内容によって異なります。システムヘッダーはそれを行いませんが、理論的には、そのファイルには何でもかまいません。ヘッダーに関数プロトタイプと型定義のみが含まれていることは、単なる慣習です。これらの 2 つのファイルがある場合:

// foo.c
int bigarray[1000];

// bar.c
#include "foo.c"
int main(int argc, char**argv()) {
return 0;
}

これは正当なコードであり、bar.c は適切にコンパイルされますが、foo.c の配列のためにメモリ フットプリントが 4K 大きくなる可能性があります (コンパイラが最適化しない場合)。

于 2012-05-28T02:17:52.163 に答える
0

はい、バイナリ サイズを増やしてから、RAM サイズを増やすことができます。2 つの方法があります: 1. ヘッド ファイルには、グローバル/静的変数の定義があります。ただし、コンパイラはそれらを最終的なバイナリに保持する場合があります。

「増加する可能性がある」と言ったのは、コンパイラが十分にスマートであれば、バイナリに必要なデータのみを含めることができ、その他は破棄できるためです。</p>

変数宣言、typedef などの他のコンテンツについては、実行時ではなくコンパイル時にのみ必要になるため、RAM は増加しません。

于 2012-05-28T04:37:06.997 に答える
0

いいえ、インクルード ファイルはコンパイラ用です。生成されるコードのサイズにはまったく影響しません。

于 2012-05-28T02:11:25.620 に答える
0

いいえ。インクルード ファイルは関数ではなく、システム関数への参照です (少なくともコンパイラに付属するものについては)。自分で確認したい場合includeは、コンパイラのディレクトリに移動し、テキスト エディタでファイルを開きます (ただし、絶対に変更しないでください)。.hそれらはあなたが書く他のものと同じです。関数は定義されていません。

コンパイラは、関数名 (例: printf) が有効であることを確認し、それをオブジェクト ファイルにコンパイルします。リンカーは、その名前を有効なシステム コールに変換します。

于 2012-05-28T02:11:38.417 に答える
0

ヘッダーのインクルードは、コンパイル時にのみ有効です。それらは、必要な実装を見つけることができる場所をコンパイラーに伝えるために使用されます。

コンパイルされた実行可能ファイルはこれらの情報を保持しないため、インクルードの数の影響を受けません。

これは、ファイルをインクルードするとメモリ使用量が増加する可能性がある PHP のようなインタープリター言語との大きな違いです。しかし、PHPでもメモリ使用量を最小限に抑えるメカニズムがあります(ファイルを1回インクルードし、未使用のインクルードを除く...)

于 2012-05-28T02:12:30.873 に答える
-1

はい、ほんのわずかですが、CPU 使用率が増加します。Windowsタスクマネージャーで確認できます....

于 2012-05-28T04:35:57.777 に答える