2011-01-06 5 views
13

これはインタビューで尋ねられるトリッキーなCの質問です。何もしない、メモリを奪うことのないプログラムを書く。何もしないでメモリを占有していないC言語でプログラムを書くことはできますか?

これは可能ですか?

+1

テイクメモリの意味を正確に定義しますか?それは、実行時にプログラムが呼び出しスタックやヒープにメモリを割り当てたり、メモリを全く使用したりすることができないことを意味しますか? – Argote

+0

@mr_eclair:インタビューの質問の場合はインタビュータグを含めます。 –

+19

雇用者を避けてください。彼らは何を求めているのか分かっていない。 –

答えて

35

すべてのプログラムはメモリを使用します。プログラムを実行すると、OSはプログラムのアドレス空間を設定し、その引数をプロセス空間にコピーし、プロセスIDとスレッドを与え、I/Oなどのファイル記述子を与えます。プログラムはすぐに終了し、このメモリとCPU時間を使い切ります。

+0

+1ありがとう.. –

4

不可能です。コードとスタックはどこかになければなりません。ほとんどの場合、メモリに格納されます。

これを無視して、すぐに終了するアプリケーションを作成するのはかなり簡単です。

+0

「ほぼいつも」?コードとスタックはどこにありますか? –

+1

@Martin:マシンには「コードメモリ」と「スタックメモリ」があります。私はまだその記憶を推測しています。しかし、それはまったく異なるプールから来るので、用語のmallocの意味での記憶ではありません。 – Goz

2

あなたの応答は、「なぜ」そのようなことをしたいのかという質問の行に沿っている必要があります。これは疑問を超えた思考のための緯度を示すでしょう。

+3

彼の講師が私のようなものだったら...彼らはスマートなお尻であるために彼に失敗するでしょう。私は大学を去ってうれしかったです(私はそれの学習面を残してうれしい...パーティーと一日中寝ることはかなり楽しかったです;))。 – Goz

+0

私はそれを飲んで... zzzz !! :-) –

+1

私は実際にあなたがなぜそれをしたいのですか尋ねることは、この場合大きな問題ではないと思います。それは、いくつかの重要な概念を模索する人為的または仮説的な質問です。ヌルプログラム自体は、それを生産しようとする考えが何かを教えるのであれば価値あるものである必要はありません。時々旅はそれ自身の報酬です。 – djna

1

質問には簡単な答えがあるようです。「いいえ、できません」 @templatetypedefにはいくつかの理由があります。

しかし、おそらく問題のポイントは、どのように対処するかを確認することです。 「どのような種類のメモリ」を要求するか、@ template-typedefが作成したいくつかの点を観察するための "マーク"が得られるかもしれません。また、@Mihran Hovsepyanによって与えられた空のmain()メソッドを表示して、この最小限のケースでもメモリが関与すると説明するためです。

0

空のプログラムはプログラムですか?以下は

は私の何のリソース使用プログラム:)


はまたことに注意していないです。厳密に言えば、OSがロードして実行するまで、プログラムは実際にはリソースを消費しません。これが起こると、それをプロセスと呼びます。

1

プログラムを起動するときにOSによって割り当てられるメモリがありますが、ほとんどの人はmain()が実際のプログラムエントリポイントではないことを知らないのです。 mainCRTStartupは、少なくともWindowsコンソールアプリです。実際のエントリポイントを持つプログラムを作成すると、ヒープ初期化ルーチン、コマンド引数の解析、グローバル変数の初期化などを避けることができます。

したがって、ヒープ管理やものを避けるプログラムを作ることができます。しかし、OSはまだそれをメモリに読み込みます。

参照:http://www.catch22.net/tuts/minexe

0

正しい答えは、それは実装固有であるということです。実装はヌルプログラムをサポートすることができ、execve(または同等の)メカニズムは、_Exit(0)に遭遇したときにそれに相当する処理を実行できますが、実際にはそうしません。

+2

Downvoterは説明するように気をつけますか? –

関連する問題