2018-04-03

anond:20180403105350

考え方としては「構造体は超でっかいサイズのint」クラスは「常にint」

で、速度が必要な処理で構造体そのもの引数としてやり取りしようとすると超でっかいintであるが故にメモリ読み込み/書き込み時間を取られる。

逆にクラス(のインスタンス)はint(メモリアドレス)のみをやり取りするので比較して高速になる。

逆に、インスタンスアドレスしかやり取りしないので、メソッド呼び出し時にはインスタンスの内部変数がそのままになってしまう。

これはメリットのように見えるがそうでない場合もあるので、

一般には座標計算等の最初から計算し直す系のデータについてはクラスではなく構造体で管理するパターンの方が多い。

記事への反応 -
  • 構造体で済ませられるようなデータなら構造体で済ませる方がスマートなんじゃないかと思ってるんですが

    • 考え方としては「構造体は超でっかいサイズのint」クラスは「常にint」 で、速度が必要な処理で構造体そのものを引数としてやり取りしようとすると超でっかいintであるが故にメモリ読...

      • 言語を特定しない一般論でC#やVBの事情を説明するのはいかがなものか。

        • むしろC++のつもりで書いてた(ほかも大体いっしょやろ?)けど、 あんまりクラスと構造体で差が無い言語もあるんか?

          • C++はクラスと構造体でメモリの置き方は変わらないでしょ。 C#は構造体は値型でクラスは参照型になる。

            • メソッドに構造体を引数として渡せば言ってるとおり「超でかいint」となって 速度にかなりの影響を与えるはずだが… 違ったっけ?

              • いやポインタ使えばいいだろ? 馬鹿?

                • 構造体のポインタを渡すようなメソッドを書きたくなったら、その構造体はクラスにした方がええんでないか?

              • C++の話なら、それはクラスでも同じ。

                • よく考えたらそうだな。 構造体はそのまま引数にする利用が一般的 クラスはインスタンスのポインタを渡す利用が一般的 なんでそこでは差がつくが、構造体のポインタ渡すなら確かに...

      • 老害おっさんはPHPとbashでクローラ書く作業に戻るんだ

        • PHPer でさえ老害かよ 老害ってのは世代的に COBOLer とかと思ってたよ

    • 構造体で十分なら構造体でいい 構造体のデータを直接いじると一貫性が無くなるとか不都合がある場合、クラスにしてメソッドを通してデータを更新させるようにする

    • クラスしか使っちゃいけないなんて、OO原理主義しか言わないんじゃないの?

    • スマートで良いと思いますよ。 今時そんなに気にはしないだろうけどメモリも食わないし。

    • 今この瞬間は、「構造体で済ませられるようなデータ」と思っていても、 次の仕様変更で「クラスにしたほうが良いデータ」に変わったときのことを考えよう。 最初から、クラスで作...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん