アカウント名:
パスワード:
C++は全然重くないですよ?
重いんだとしたら、重くなるようなコードを書いたせい。C++のせいではありません。
*
CとC++はかなり性質が異なる言語なのに、よく「C/C++」とまとめられてしまう一方、パフォーマンス傾向としてはほとんど同じなのに、どうして「C++はCよりも重い」という根拠のない言いがかりをよくつけられるんでしょうねえ。
>Cに比較してパフォーマンスがた落ちですね。
C で OOP やると同様のことが起こるので、C++ のせいではない気がする。手続き型アプローチに対して OOP を否定しているだけで、言語間の比較になっていないような。メモリ管理も placement new を使うとか個別にアロケータ用意するなりすればいいだけだし。本当に virtual 必要な箇所については、C でも関数ポインタ使ったりするわけで、C++ だから遅いわけではない。
C++ だから重くなるのは『言語サポートされる不要なメモリ管理コード (new, delete の実装) が付いてくる』とか『例外処理使ったときなど RTTI 用にシンボル文字列が付いてくる』とか、その辺くらいじゃないかなぁ。
動的推定ってことは RTTI ってこととしてコメントすると、ABI 的には仮想関数テーブルを持つクラスに対して、一意のシンボル(たいてい文字列)が埋め込まれるだけですので、
> 使われるかどうかも分からない似たようなバイナリコードを多数リンクせざるを得ない
というのとはちょっと違う気がします。
コンテナ等、テンプレート使っていろんな型でインスタンス化すると、静的にコード バリエーションが増えるので、結果としてバイナリは肥大化しますが、その辺の話と混同されてる?
C++をC++として使うとそれだけで内部フラッシュに収まらない環境が有る訳ですが…。かといってCと同等に使うなら、Cの方が都合も良買ったりすることも多い。組み込みの場合、「便利な機能」が「大きなお世話」な事が多々あるからなァ…
ホビー向けの組み込みプラットホームであるArduino [wikipedia.org]は、gccにラッパを被せたC/C++にベースの開発環境になっており、C++なクラスライブラリがある程度用意されています [musashinodenpa.com]
あまり本気でC++してるわけではないですが、クラスメソッドという形での名前空間の分離はそれだけでもC++の価値はあるんじゃないかと思います。
実行速度はそうでもないと思いますが、サイズはどうしても重くなりがちな気がします。まぁSTLとか使わなきゃいいんでしょうが、それならCでいいじゃんってなりかねないので……
>まぁSTLとか使わなきゃいいんでしょうが、>まぁSTLとか使わなきゃいいんでしょうが、大事なことなので2度言いたくなる病気に感染しました
まぁ、MFC導入されたMS-C/C++7.0で死んだ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲを呼ぶ -- ある傍観者
組み込みな人は死ねってこと? (スコア:3, 興味深い)
特に小規模な方ですと、アセンブラに回帰ですか? それじゃプログラマはもっと地獄でしょ。
#ツッコミ入ると思うから念押しておくけど、携帯のアプリプロセッサやブルーレイレコーダーとかぐらいの規模(とリソース)のものは、寧ろ例外に近いものですし。
Re:組み込みな人は死ねってこと? (スコア:1)
C++は全然重くないですよ?
重いんだとしたら、重くなるようなコードを書いたせい。
C++のせいではありません。
*
CとC++はかなり性質が異なる言語なのに、よく「C/C++」とまとめられてしまう一方、パフォーマンス傾向としてはほとんど同じなのに、どうして「C++はCよりも重い」という根拠のない言いがかりをよくつけられるんでしょうねえ。
Re:組み込みな人は死ねってこと? (スコア:1, すばらしい洞察)
Cで引数などで構造体をコピーしているのと同等なので、「コードのせい」という理解はあっているでしょう。
しかし、「オブジェクト指向的な要素を使わなければ」という条件付きですね。
きちんとオブジェクト指向プログラミングすれば、
カプセル化した中で、勝手にメモり管理したり、virtual使ったりして、
Cに比較してパフォーマンスがた落ちですね。
Re: (スコア:0)
>Cに比較してパフォーマンスがた落ちですね。
C で OOP やると同様のことが起こるので、C++ のせいではない気がする。手続き型アプローチに対して OOP を否定しているだけで、言語間の比較になっていないような。メモリ管理も placement new を使うとか個別にアロケータ用意するなりすればいいだけだし。本当に virtual 必要な箇所については、C でも関数ポインタ使ったりするわけで、C++ だから遅いわけではない。
C++ だから重くなるのは『言語サポートされる不要なメモリ管理コード (new, delete の実装) が付いてくる』とか『例外処理使ったときなど RTTI 用にシンボル文字列が付いてくる』とか、その辺くらいじゃないかなぁ。
Re: (スコア:0)
型の動的推定に対応するために、型が違うだけで使われるかどうかも分からない似たようなバイナリコードを多数リンクせざるを得ないから、C++だとどうしてもバイナリが肥大する、というような話を昔、聞いたのですが、そのあたりは解決しているんでしょうか?
Re: (スコア:0)
動的推定ってことは RTTI ってこととしてコメントすると、ABI 的には仮想関数テーブルを持つクラスに対して、一意のシンボル(たいてい文字列)が埋め込まれるだけですので、
> 使われるかどうかも分からない似たようなバイナリコードを多数リンクせざるを得ない
というのとはちょっと違う気がします。
コンテナ等、テンプレート使っていろんな型でインスタンス化すると、静的にコード バリエーションが増えるので、結果としてバイナリは肥大化しますが、その辺の話と混同されてる?
Re: (スコア:0)
C++をC++として使うとそれだけで内部フラッシュに収まらない環境が有る訳ですが…。
かといってCと同等に使うなら、Cの方が都合も良買ったりすることも多い。
組み込みの場合、「便利な機能」が「大きなお世話」な事が多々あるからなァ…
Re:組み込みな人は死ねってこと? (スコア:2, 興味深い)
ホビー向けの組み込みプラットホームであるArduino [wikipedia.org]は、gccにラッパを被せたC/C++にベースの開発環境になっており、C++なクラスライブラリがある程度用意されています [musashinodenpa.com]
あまり本気でC++してるわけではないですが、
クラスメソッドという形での名前空間の分離は
それだけでもC++の価値はあるんじゃないかと思います。
Re: (スコア:0)
実行速度はそうでもないと思いますが、サイズはどうしても重くなりがちな気がします。
まぁSTLとか使わなきゃいいんでしょうが、それならCでいいじゃんってなりかねないので……
Re: (スコア:0)
>まぁSTLとか使わなきゃいいんでしょうが、
>まぁSTLとか使わなきゃいいんでしょうが、
大事なことなので2度言いたくなる病気に感染しました
まぁ、MFC導入されたMS-C/C++7.0で死んだ