2017-02-27 7 views
1

特にC/C++で変数を宣言すると、変数はデータ型(およびマシン)に従ってコンピュータのメモリに割り当てられます。私が持っている質問は、オンラインIDEでプログラムを実行すると、自分のPC /マシンのメモリが使用されるのでしょうか?オンラインコンパイラがコンピュータのメモリに与える影響

我々は特にfree()malloc()calloc()ような関数の引数にポインタを誤用した場合、何らかの理由で、コンピュータのメモリが破損している可能性があるので、この質問は、より動的にCにメモリを割り当てるの問題のために意味されますある程度まで(メモリリーク)。

したがって、オンラインのコンパイルでコンピュータのメモリを使用しないと、おそらくオンラインのIDEでこれらの機能を使用できますが、私はそのケースを知りません。それは安全ですか?

+0

プログラムをローカルで実行しても、コンピュータのメモリには「損傷」はありません。メモリリークが発生すると、 'malloc' *多くの' free'を呼び出すと、呼び出しは最終的に失敗します。それで全部です。プログラムが終了すると、OSは再びソートを行い、プログラムが使用していたすべてのメモリを解放します。 –

+0

これはCの抜粋です:Schildtによる完全なrefereceです。 'free()'関数は、ptrがポイントするメモリをヒープに返します。これにより、将来の割り当てのためにメモリを利用できるようになります。 'free()'は、以前に動的割り当てシステムの関数の1つを使って割り当てられたポインタでのみ呼び出されることが必須です。コールで無効なポインタを使用すると、メモリ管理メカニズムが破壊され、システムがクラッシュする可能性があります。ヌルポインタを渡すと、 'free()'は何もしません。 – Buddhist

+1

ええ、Linux、Windows、OSXのような現代的なオペレーティングシステムを実行すると、ヒープ全体が仮想メモリ内にあり、プログラムが終了すると再利用されます。各プログラムには独自のヒープがあり、相互にダメージを与えることはできません。 –

答えて

8

すべてがリモートマシン上で実行されるため、ローカルPCはその上で起こっていることの影響を受けません。

+0

私はまた教授から、記憶に関連するオンラインのものを使うべきではないと聞いてきました。それはいつも間違いです。これは本当ですか ?しかし、今までポインタに関するコンパイルミスは経験していません。 – Buddhist

+1

失敗したものは、リモートマシンで失敗します。メモリ破損を含む。あなたのローカルマシンに影響を与える唯一の方法は、ブラウザの "ゼロデイ"エクスプロイトです。 –

3

オンラインコンパイラは、コンピュータのローカルメモリにアクセスしません。すべての実行プロセスはリモートマシン上で行われます。したがって、malloc(),calloc()、さらにはfree()などの関数を使用していても、コンピュータはオンラインコンパイラの影響を受けません。

たとえば、一般的なオンラインコンパイラであるIdeoneは、Sphere Engineが所有するリモートサーバー上で送信されたコードを実行します。メモリの割り当て、コンパイル、実行などはすべてそのサーバー上で行われます。他のオンラインコンパイラも同様のサービスを利用しています。

上記を述べたことに注意してください。コンパイラが遅れたり、コードが間違っていたり(意図しない無限ループに入った場合など)、ブラウザが遅れたり、ハングしたりすることがあります。しかし、それはあなたのコンピュータのメモリとは関係がありません。開いているブラウザだけが影響を受け、他のすべてが正常に動作するはずです。この遅れが発生する理由は、障害のあるコードや処理速度の遅さなどによる遅延が発生しているリモートサーバーの問題が原因です。また、インターネットの速度が遅く、遅延が発生する可能性があります。しかし、もう一度言って、これはあなたのマシンのローカルメモリとは関係ありません。

この最後の段落は、主な質問に対する追加のメモです。

+1

余分なメモをありがとう。 – Buddhist

2

通常は、Webサービスです。彼らはプログラムを受け取り、サンドボックス(サーバ上)でコンパイル、リンク、実行し、出力をエンドユーザに返すだけです。私はそれらのすべてにコメントすることはできませんが、これは典型的な動作です。だから一般的に、彼らは安全であり、彼らはコードを実行するためにあなたのコンピュータのメモリを使用しません。

+0

私はまた教授から、記憶に関連するオンラインのものを使うべきではないと聞いてきました。それはいつも間違いです。これは本当ですか ?しかし、今までポインタに関するコンパイルミスは経験していません。 – Buddhist

+0

私の考えでは、実際にはコーディングを学び始めるための遊び場としてはいい場所です。あなたは自分のコンピュータのメモリを破壊しないので、新しいプログラマがCのような言語でポインタを操作しようとしているのが普通です。あなたの教授が指摘したかったのは、あなたがサイズを選択することに何の力もないコードを実行しているサンドボックスのメモリ(大きなメモリを割り当てる場合)やその他のパフォーマンス関連の仕様 – Arash

+0

@arashおそらく、あなたとシステムメモリの間にさらに抽象的な層があります。 C言語ではかなり抽象的ですが(ポインタの実際のアドレスがないため、これを仮想メモリにマップできるマッパーがあります)、オンラインコンパイラではさらに抽象化される可能性がありますあなたは混乱しました。 @神風。 –

関連する問題