4

あるインタビューで、「関数はどのくらいのメモリを使用しますか?」という質問を受けました。したがって、インスタンス化するすべてのデータ変数、データ構造によって使用されるすべてのメモリを合計できると言って答えようとしました。システム、および動的に割り当てられた入力を追加します。インタビュアーは私の答えに満足していませんでした。

私は C++ を学んでおり、洞察をいただければ幸いです。

4

4 に答える 4

7

質問はまったく定義されていません。関数自体は、呼び出し元からのアクティベーション レコード、パラメーター、およびスタック上のローカル変数用のスペースだけを占有します。アーキテクチャによると、アクティベーション レコードには、保存されたレジスタ、関数が呼び出されたときに返されるアドレスなどが含まれます。

ただし、関数はヒープに必要なメモリ量を割り当てることができるため、正確な答えはありません。

さらに、関数が再帰的である場合、常に各呼び出しの間に必要なアクティブ化レコードが原因で、大量のメモリを使用する可能性があります。

于 2012-11-21T03:40:48.003 に答える
4

関数のフットプリントに関するこのガイドは、あなたが話していたものだと思います。彼らはおそらく「ポインタであるため32/64ビット(整数)」を探していました...

于 2012-11-21T03:45:59.210 に答える
3

静的動作の観点から、 1. 使用されるデータ - すべての変数のメモリ サイズの合計 2. 命令のサイズ - 関数内に記述された各命令は、バイナリでメモリを占有します。これが、関数のサイズを識別する方法です。これは、コンパイルされたコードのサイズに他なりません。動的な動作(実行時)の観点から、 1. 関数呼び出しによって生成されたヒープ メモリは関数メモリです。

于 2012-11-21T03:53:50.443 に答える