class を使えば – プログラミング – Home

通知
すべてクリア

[解決済] class を使えば

固定ページ 1 / 2

ER
 ER
(@ER)
ゲスト
結合: 24年前
投稿: 12
Topic starter  

こんばんわ。ひとつ簡単な疑問を確定させたいのでアドバイスお願いします。
いまゲームを作ってて速度の面とかきになるんですが、クラスをつかったら遅くなるってどこか
で聞いたきがしますが、本当ですか? 程度もできればお願いします。


引用未解決
トピックタグ
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

質問の文章から言って、
それらを気にすることができるレベルの知識をあなたが持たれているとは思えません。
まったく気にしなくてよいかと思われます。

おそらく、クラスを使う、使わないといったレベルの問題ではなく、
もっと大きな処理上のボトルネックを問題とすべきでしょう。

処理の流れをある程度最適化した上でなら、
オブジェクトのコピーなどが意図せず行われてしまっている場合や
仮想関数の呼び出しなどが、足を引っ張ることはありえます。

が、それらも、『クラスの使用』が原因ではなく、
それに対するプログラマの無知が問題です。
オブジェクト指向プログラミングをしながら、
そうでないものに匹敵するパフォーマンスを出すことも可能です。


返信引用
ER
 ER
(@ER)
ゲスト
結合: 24年前
投稿: 12
Topic starter  

回答ありがとうございます。
ん~妥協案じゃないんですが。。。回答の解答ではないですが。。。^^;


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> クラスをつかったら遅くなるってどこかで聞いたきがしますが、本当ですか?

ガセネタです。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

PAIさんので十分答えになっていると思いますけどねぇ。
要は使い方が問題なのであってクラスを使ったから遅くなると
言うわけではないというのが読み取れると思いますけれど。

επιστημηさんが書かれているような書き方でないと駄目なんですかねぇ。


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

>クラスをつかったら遅くなるってどこかで聞いたきがしますが、本当ですか?
場合に依りますが本当です。

>程度もできればお願いします。
意識する必要があるのは、仮想関数、仮想継承、多重継承等を使う時でしょう。
これらは使わない時に比べ、機能実現の為のオーバーヘッドコードが生成されます。
(メンバや基本クラスへのアドレッシングの為に、
アジャスタサンク経由でポインタ生成する等)

又、これらを組み合わせると更にオーバーヘッドが大きくなります。
o /FAオプションを使って生成したアセンブリコードを検証
o RDTSC命令(=QueryPerfomanceCounter())での速度計測
で検証できます。

CPUクロック単位での極端な高速性が必要な場合、
上記オーバヘッドは無視できません。
この場合に限り、迂闊な使用を控える必要があるでしょう。

それ以外では、積極的に使うべきでしょう。
コードの単純化に大きく貢献する為です。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> CPUクロック単位での極端な高速性が必要な場合、
> 上記オーバヘッドは無視できません。

裏を返せば その程度の差 でしかないのです。


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

>裏を返せば その程度の差 でしかないのです。
殆どの場合、仰る通りです。が、残念ながらビデオゲームの世界では
その程度の差で一蹴できない事です。

事実、記述機能を使ったコードと使わないコードでは、全く同じ処理内容でも
4次ベクトル内積演算 数百~数千回分の差が出る事もあります。(これはでかい!)又、

o ゲームソフトにおいて、「細かいオーバーヘッド関するコスト意識が
ある人と無い人では、作られたソフトのあらゆる質に雲泥の差が出る」
という現実がある事
o 予め知っておくと得であろうという事
o 今回の質問の場合、まさにそのケースに該当する事
o MS-C/C++の設計&実装の担当者の一人が この問題を公に説明している事

から 微力ながら参考になれば という事で説明致しました。


返信引用
ER
 ER
(@ER)
ゲスト
結合: 24年前
投稿: 12
Topic starter  

みなさん回答ありがとうございます!
特に「くたくたさん」とても参考になりました!ホントにありがとうございます!
まさに!くたくたさんまさにその通りですっ!
ホントにみなさんWindowsアプリケーション開発者は身に病でも気づきませんが、
ゲームプログラマーとの大きな違いは、
前者の方はBYTE型の変数bの2倍を b *= 2; ;と書きますが、
後者の方はBYTE型の変数bの2倍を b <<= 2; ;と書きます。
っと、色々いろいろありますが、切り詰めてるってことだよね。くたくた殿。
まぁ別にわかってほしくはないですけど。

にしては、4次ベクトル内積演算数百~数千回分はかなりでかいですねー勉強なります。
くたくたさんとても参考になりましたよ!ありがとうございます。m(_ _)m


返信引用
ER
 ER
(@ER)
ゲスト
結合: 24年前
投稿: 12
Topic starter  

あ、間違えた^^;
b <<= 1;
だね。


返信引用
...
 ...
(@...)
ゲスト
結合: 22年前
投稿: 113
 

>ホントにみなさんWindowsアプリケーション開発者は身に病でも気づきませんが、
>ゲームプログラマーとの大きな違いは、
>前者の方はBYTE型の変数bの2倍を b *= 2; ;と書きますが、
>後者の方はBYTE型の変数bの2倍を b <<= 2; ;と書きます。
>っと、色々いろいろありますが、切り詰めてるってことだよね。くたくた殿。
>まぁ別にわかってほしくはないですけど。

夏厨がなにいってんだか・・・
Efficient C++ よめ、とりあえず。


返信引用
ER
 ER
(@ER)
ゲスト
結合: 24年前
投稿: 12
Topic starter  

うぉ!いまVC++6.0確認しまいたが、最適化されてるぅ!ハズカシーおかしいなぁ昔のやつだっ
たかなぁ。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

...わからんなぁ。

コードからどんな機械語が吐き出されるかなんて、
処理系/CPUが違えばぜんぜん違うのだから、
そこまで細かいチューニングが必要ならば
コード書いて機械語吐かせて読めばええやん。

>ホントにみなさんWindowsアプリケーション開発者は身に病でも気づきませんが、

こんな台詞が吐けるんなら訊くまでもないことじゃなかったんかな。


返信引用
ER
 ER
(@ER)
ゲスト
結合: 24年前
投稿: 12
Topic starter  

>...わからんなぁ。

あ、見てなかったんですか。じゃあもう一度同じことかきますね。

>まぁ別にわかってほしくはないですけど。

//不快・・になれば管理人さん速攻削除をお願いします。

ええ。なんか全体的にここ中級者が初級者を戸惑わせる言動に満ち溢れてるきがしますねぇ。大
丈夫でしょうか。
>ガセネタです
もそうですが、
前にも他のスレッドですが、Admin権限なんやらでうる覚えを伝授しようとなさってたのです
が、もし、woodさんが注釈をいれなければ初心者の方は本気で信じていたでしょうか。*ここ
でゆうのは確定された知識。
そして、単純にも1+5は?の問題提唱に「なぜこの問題を上げる?」ような返しもおかしいです
ね。ちょっと面度くさいです。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

『クラスを使ったら遅くなるというのは本当か?』
 ↓
『クラスを使うことによって遅くなるのではない。』

正しい問答だと思うが?

仮に最初の質問が、

『クラスを使ってプログラミングする際に、
 速度的パフォーマンスの上で気をつけるべきことはないか?』

だったら、はじめから『仮想関数を使わないように』とか
ちゃんとしたアドバイスがきたと思うが?


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました