0

次の本を勧められました。

Andrew Koenig および Barbara E. Moo Addison-Wesley 著、例による加速された C++ の実用的なプログラミング、2000 ISBN 0-201-70353-X

この本の基本は、オブジェクト指向プログラミングはメモリに関して非常に浪費的であり、ほとんどのソースコードはこの方法で書かれるべきではなく、すべてのインライン関数呼び出しと手続き型プログラミングを使用するべきであるということです.

つまり、ほとんどのプログラミング本はミルクとほぼ同じ保存期間があることを知っていますが、クライアント/サーバーアプリケーション (データベース、サーバーなど) (デバイスドライバーやビデオゲームではない) をコーディングする場合は、面倒な手間をかけるだけの価値があります。速度を上げるためだけに保守不可能なコードですか?

それとも、クライアントの非常に古いマシンでアプリケーションを実行するだけの価値があるのでしょうか? または、単一のボックスでより多くのサーバーを実行できるようにするには?

4

6 に答える 6

8

うわー、いいえ。

最新の C++ コンパイラは優れています。大量のメモリ使用量は、設計が不十分であるか、メモリ データ セットが大きいことを示しています。C++ クラスに必要なオーバーヘッドは最小限であり、最近では実際には問題になりません。

オブジェクト指向プログラミングは、単一の概念に関連するアクションを論理的にグループ化できるようにコンポーネントを作成する方法です (つまり、「車」のすべてのアクションまたは「猫」のすべてのアクション)。スパゲッティ オブジェクトの記述に悪用できないと言っているわけではありませんが、COBOL は任意の言語で記述できます。

さらなる例として、C++ とオブジェクトを使用して組み込みソフトウェア プラットフォームを作成することは、最近では非常に可能であり、受け入れられています。わずかな速度の低下とメモリ使用量の増加 (ある場合) は、保守性とコードの使いやすさの向上によって 1,000 倍以上の代償を払っています。

于 2008-10-17T15:35:39.213 に答える
7

私はその本を読んだことはありませんが、彼らが「オブジェクト指向プログラミングはメモリに関して非常に無駄が多い」という本を書いたとは信じがたいです (完全な開示: Andy & Barbara は私の友人です)。

Andy は、OOP がメモリを浪費しているとは決して言いません。彼は、特定のアルゴリズムや手法は無駄が多いと言い、場合によってはOOの少ないアプローチを推奨するかもしれませんが、一般的なルールとして、OO設計は他のスタイルの設計よりも多かれ少なかれ無駄ではないと主張する最初の人になるでしょう.プログラミング。

OO 設計が無駄であるという議論は、主に、C++ の「hello world」プログラムの EXE が C の「hello world」プログラムの EXE よりも大きくなる傾向があるという事実に由来しています。これは主に、iostreams が printf よりも大きいためです (ただし、iostreams はより多くのことを行います)。

于 2008-10-17T15:54:56.477 に答える
2

この本の基本は、オブジェクト指向プログラミングはメモリに関して非常に無駄であり、ほとんどのソースコードはこのように書くべきではなく、すべてのインライン関数呼び出しと手続き型プログラミングを使用する必要があるということです。

これは本のやや還元的な要約だと思います

要するに、タイトルの質問に答えるために、私は本とそこに含まれる概念の両方を引き続きお勧めします。

アドバイスは、アルゴリズムを実装するためだけにクラスを作成するべきではないという方針に沿っているのではないかと思います。これは依然として良いアドバイスだと思います。

于 2008-10-17T16:24:38.150 に答える
2

C++ と OOP 自体は非効率的ではありませんが、多くの C++ プログラムが同等の C プログラムよりも効率の悪い方法で操作を実行するのを見てきました。最大の原因は、多くの場合、オブジェクト全体を一度にmallocするのではなく、個々のオブジェクトを新規作成することによって、多数の小さなメモリ割り当てが発生することです。同様に、ポリモーフィズムと仮想関数は優れていますが、一部の C++ プログラマーが認識していないオーバーヘッドが発生します。オブジェクトのピース単位の構築は、前述のmallocされた構造体の配列の1 つの汚れた大きなmemsetよりもはるかに遅くなる可能性があります。

私の推測では、最近のコンピューターのほとんどのアプリケーションでは、これは実際には問題ではありません。C++ には C のすべてがサブセットとして含まれていることを考えると、状況に応じてパラダイムを組み合わせたり一致させたりすることを妨げるものは何もありません。また、新しいヒープ ハンドラーは、初期の MS の取り組みよりもはるかに優れており、非常に役立ちます。

于 2008-10-17T16:19:17.473 に答える
0

開発者の 1 時間のコストについて考えてみてください。

1 時間の CPU 時間のコストについて考えてみてください。

そうは言っても、オブジェクト指向のコーディングによるパフォーマンスの低下はまったく無視できます。特に、プログラムが計算するときに何かを計算することを考慮すると、それはおそらく、OOP が使用されているかどうかよりも、使用されるアルゴリズムの性質に大きく依存しています。

于 2008-10-17T15:49:01.467 に答える
-1

いくつかの答えは、要点を完全に逃しています。C++ の OOP には、対応する C よりもはるかに高速になる多くの機会があります。Scott Meyers による I think Effective C++ から例を挙げます。これは、コンパイラが C++ では関数呼び出しを簡単にインライン化できるのに対し、C ではクイックソートが原因でインライン化できないため、クイックソートの実行は C++ ソートよりも遅くなるということです。関数ポインタを渡しました。

さらに、他の言語とは異なり、c++ が遅くなることはありません。遅いのは、純粋にライブラリの実装またはアルゴリズムの設計によるものです。

于 2008-10-17T19:02:59.047 に答える