3

コンパイルした Hello World Obj-C アプリケーションをテキスト エディターで開いたところ、驚いたことに、約 8 キロバイトの 00 00 00 00 00 00 00 00 ... が見つかりました。

これらはなぜここにあるのですか?これらのゼロをクリアする方法はありますか (機能が多すぎるとは思えません)。

そもそも 16kB しかないので、このファイルでは明らかにそれほど重要ではありませんが、とにかく知りたいです。

4

4 に答える 4

7

コード、データ、再配置、または使用する実行可能形式の他のセクション間のパディングである可能性が最も高いです。

リンカーは、4k または 8k 境界でそのようなセクションをパディングするのが好きです。これにより、少しメモリを浪費する代わりに読み込み時間が改善されます。

単純な hello world の場合は重要ですが、大規模なアプリケーションの場合、パディングに使用される余分なメモリは無視できます。

于 2008-09-28T15:05:38.587 に答える
0

Objective-C はインクリメンタル リンクをサポートしていますか? これで、パディング スペースが多かった理由が説明できます。

于 2008-09-28T14:56:46.360 に答える
0

一部のコンパイラまたはリンカは、ファイル サイズの概数を必要とします。コードを追加しても、ファイル サイズは増加しないことがわかります。それがあなたが見ているゼロだと思います。

于 2008-09-28T14:57:38.357 に答える
-1

多分それは静的変数ですか?多くの C に似た言語では、静的に宣言された変数の初期値が、コンパイラによって出力されたコードに埋め込まれていることを私は知っています。実行時に、この初期値はプロセスのメモリにマップされます。おそらく、あなた (またはあなたがインクルードまたはリンクしているコード) は、8 KB のゼロで初期化された配列を定義しています。

于 2008-09-28T19:04:35.343 に答える