次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part134
http://mevius.5ch.net/test/read.cgi/tech/1516406742/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part135
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fcb-q1Nq)
2018/03/31(土) 20:20:06.25ID:o3PNwIlC0598デフォルトの名無しさん (ドコグロ MM93-pJ79)
2018/05/10(木) 21:40:19.82ID:n6BTi4dIM >>597
あと英語な
あと英語な
599デフォルトの名無しさん (ワッチョイ e3cb-k37M)
2018/05/10(木) 21:41:29.95ID:tcNeLXMy0 >>585
そこがいいんだよ
隠蔽されたことを忘れたフリをし
本当は忘れていないということの練習に向いている
忘れたフリが綺麗なコードの練習
本当は忘れていないことが性能評価につながる
両立した技能の練習に向いているということだ
そこがいいんだよ
隠蔽されたことを忘れたフリをし
本当は忘れていないということの練習に向いている
忘れたフリが綺麗なコードの練習
本当は忘れていないことが性能評価につながる
両立した技能の練習に向いているということだ
600デフォルトの名無しさん (ワントンキン MMa3-k/8h)
2018/05/11(金) 12:08:47.61ID:CPfY1M+aM601デフォルトの名無しさん (アウアウウー Sa89-Iyo3)
2018/05/11(金) 12:33:06.03ID:Asz7DXCua 今はどうか知らないけどcは標準でvectorやlistやmapがないから
そこから始めないといけないのでめんどくさい
アルゴリズム辞典見たら配列をdefineされたNやMで確保してた
ライブラリとして使う気ゼロ
そこから始めないといけないのでめんどくさい
アルゴリズム辞典見たら配列をdefineされたNやMで確保してた
ライブラリとして使う気ゼロ
602デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 13:01:20.12ID:Mluu9Rs0d603デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 13:03:39.86ID:Mluu9Rs0d604デフォルトの名無しさん (ブーイモ MMeb-k/8h)
2018/05/11(金) 13:59:40.72ID:lM6VzEPtM >>602
あーハイハイそうですね〜
あーハイハイそうですね〜
605デフォルトの名無しさん (ワッチョイ 2565-5o/y)
2018/05/11(金) 15:05:19.79ID:KxM4SNOx0 >>603
コスト云々よりジェネリクスが無いから汎用コンテナを作るのが難しい
コスト云々よりジェネリクスが無いから汎用コンテナを作るのが難しい
606デフォルトの名無しさん (ラクッペ MM01-XMWP)
2018/05/11(金) 15:52:32.74ID:MTbwW/C5M 作るのが難しい人は拾ってくればいいだけ
607デフォルトの名無しさん (ワッチョイ cb81-Iyo3)
2018/05/11(金) 18:24:24.95ID:biwWi4aJ0 数十バイトしかないなら、普通アセンブラで書くだろう
608デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 18:50:06.30ID:Mluu9Rs0d そうでもない
普通にCが使えるので
普通にCが使えるので
609デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 18:55:57.64ID:Mluu9Rs0d610デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/11(金) 19:49:06.46ID:l0MSXuwV0611デフォルトの名無しさん (ワッチョイ 2565-5o/y)
2018/05/11(金) 19:59:50.91ID:KxM4SNOx0 >>609
静的型の恩恵が受けられなくなるだろ?
静的型の恩恵が受けられなくなるだろ?
612デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 20:34:03.62ID:Mluu9Rs0d で?
613デフォルトの名無しさん (ブーイモ MMeb-/P3g)
2018/05/11(金) 20:40:41.03ID:x5BQ9FS4M614はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-Iyo3)
2018/05/11(金) 20:56:19.66ID:e+Ei11A70 初期の JAVA もコンテナを使うときにキャストが必須ってアレな仕様だったよな。
615デフォルトの名無しさん (アウアウウー Sa89-k37M)
2018/05/11(金) 21:04:30.87ID:2EGPeEG9a 昔は仕様がダメで段々改良されていくということがありますが、
それはなぜなのでしょうか?
その当時はハードウェアの性能上そういう仕様にせざるを得なかったというような
理由があるのでしょうか?
それとも単に思慮が足りなかったというだけでしょうか?
それはなぜなのでしょうか?
その当時はハードウェアの性能上そういう仕様にせざるを得なかったというような
理由があるのでしょうか?
それとも単に思慮が足りなかったというだけでしょうか?
616デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 21:16:49.77ID:Mluu9Rs0d 理由はいろいろ
617はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1b6f-Iyo3)
2018/05/11(金) 21:20:43.57ID:e+Ei11A70618デフォルトの名無しさん (ワッチョイ cb81-Iyo3)
2018/05/11(金) 21:23:11.17ID:biwWi4aJ0 仕様が固まらないうちに作る時は、それなりの暫定仕様か何らかの制限事項を設けて開発したな
619デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 21:36:00.99ID:Mluu9Rs0d 知見が足りなかったなんてのは少数派と思う
シンプルな仕様からだんだんと機能追加で肥大化の方向
ってのがほとんど
シンプルな仕様からだんだんと機能追加で肥大化の方向
ってのがほとんど
>>619
C89 からの「関数の引数として構造体が(実体渡しとして)OK」というのは、私には堕落以外のなにものでもないと
C89 からの「関数の引数として構造体が(実体渡しとして)OK」というのは、私には堕落以外のなにものでもないと
621デフォルトの名無しさん (ワッチョイ 1be7-1eaZ)
2018/05/11(金) 21:53:49.41ID:HARszYd10 昔のC++にあった(今もある)糞の山は、今のモダンな他言語たちへの反面教師として大いに役立った
622デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/11(金) 21:55:02.56ID:Mluu9Rs0d 例えばどの仕様が糞?
623デフォルトの名無しさん (ワッチョイ 2565-5o/y)
2018/05/11(金) 22:06:17.59ID:KxM4SNOx0624デフォルトの名無しさん (アウアウカー Sa11-jbYT)
2018/05/11(金) 23:57:53.51ID:MowAKA7Xa 独習C++は一通り読んだんだが次に読む本ある?問題集みたいなのとか
>>624
私がお勧めしているのは
https://www.amazon.co.jp/dp/4894714221/
https://www.amazon.co.jp/dp/4881357786/
前者は実は難があって、変てこな実装をしている部分もありますが、それを自分で調べて解決すれば、強くなれると思います
後者は STL の解説本です
いずれも C++11 以前で今となっては古いのですが、代わりになるような本がない…
両方とも私は読んでいますので、普通の質問には答えることができます
私がお勧めしているのは
https://www.amazon.co.jp/dp/4894714221/
https://www.amazon.co.jp/dp/4881357786/
前者は実は難があって、変てこな実装をしている部分もありますが、それを自分で調べて解決すれば、強くなれると思います
後者は STL の解説本です
いずれも C++11 以前で今となっては古いのですが、代わりになるような本がない…
両方とも私は読んでいますので、普通の質問には答えることができます
626デフォルトの名無しさん (ワッチョイ 55b3-A5aB)
2018/05/12(土) 00:24:10.29ID:TkoJoFTb0 最初に読む本は禿4版一択ですよ。
627デフォルトの名無しさん (ワッチョイ 3d9e-pJrV)
2018/05/12(土) 01:17:09.76ID:hwxaPbIq0 どの言語でも、入門書の次は、Effective 何々
628デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 05:59:18.81ID:D96wT16B0629デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 06:50:27.10ID:QiJLTR+Nd630デフォルトの名無しさん (ワッチョイ e3cb-Ao7v)
2018/05/12(土) 07:33:39.79ID:eFTG6CfX0 >>623
データ構造の要素が静的に型が決まろうがそうでなかろうが、必要な要素数のメモリを確保する作業に違いはない。
せいぜい型のサイズを余計に掛け算するくらいだ。
確保するサイズが間違っていれば静的に型が決まろうがメモリ破壊は起きる。
もう少し具体的に示してくれないか?
データ構造の要素が静的に型が決まろうがそうでなかろうが、必要な要素数のメモリを確保する作業に違いはない。
せいぜい型のサイズを余計に掛け算するくらいだ。
確保するサイズが間違っていれば静的に型が決まろうがメモリ破壊は起きる。
もう少し具体的に示してくれないか?
631デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 07:37:30.31ID:D96wT16B0 静的な型の恩恵がどうたらって
mallocがvoid*を返すのと同じだろ
問題ちゃ問題だがそんなもん怖がるやつぁC使いに向かない
mallocがvoid*を返すのと同じだろ
問題ちゃ問題だがそんなもん怖がるやつぁC使いに向かない
632デフォルトの名無しさん (アウアウウー Sa89-5o/y)
2018/05/12(土) 08:45:19.55ID:vhGL8v7ea >>629
静的なら実行時パフォーマンスには影響しない
>>630
「既に壊しうるのだからちょっとくらい壊せる場所増やしてもいいでしょ」には無条件では同意しかねる
>>631
向いていようがいまいがCの案件はあるわけで, 可能な限り安全にコーディングしたいと思うのは可笑しいか?
で話を戻すと, 汎用コンテナのCでの実装には, 大きく分けてもdefine使った型安全な実装とvoid *を使ったオーバーヘッドあり型安全なし実装が考えられるわけで, まずそれだけでこうして対立し得る
実装上でもいずれもpros/consがあるわけで, そりゃ規格がまとまる道理がないよね, って主張
別に必要最小限の機能で自分で実装することを否定するわけじゃないし, 型安全が絶対だという気もない
静的なら実行時パフォーマンスには影響しない
>>630
「既に壊しうるのだからちょっとくらい壊せる場所増やしてもいいでしょ」には無条件では同意しかねる
>>631
向いていようがいまいがCの案件はあるわけで, 可能な限り安全にコーディングしたいと思うのは可笑しいか?
で話を戻すと, 汎用コンテナのCでの実装には, 大きく分けてもdefine使った型安全な実装とvoid *を使ったオーバーヘッドあり型安全なし実装が考えられるわけで, まずそれだけでこうして対立し得る
実装上でもいずれもpros/consがあるわけで, そりゃ規格がまとまる道理がないよね, って主張
別に必要最小限の機能で自分で実装することを否定するわけじゃないし, 型安全が絶対だという気もない
633デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 08:57:39.01ID:QiJLTR+Nd 高速コンパクトと安全性利便性は相反するものだ
諦めろ
諦めろ
635デフォルトの名無しさん (アウアウウー Sa89-5o/y)
2018/05/12(土) 09:12:02.44ID:vhGL8v7ea >>634
必読書ですしおすし
必読書ですしおすし
636デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 09:13:51.54ID:PbE4ojLD0 >>632
> void *を使ったオーバーヘッドあり
とは何?サイズ管理+アドレスの計算のこと?
だったらC++の汎用コンテナでも同じ事を内部でやっているし、オーバーヘッドはないが。
見た目でしか分からない人はCに向いていないぞ。
というか、型安全が欲しければC++を、
そんなん要らんから小さくて早いコードを、というのならCを、ってだけだろ。
その分自分で管理する項目が増えるだけの話で。
選択肢はユーザー側に与えられているのだから、それ以上は要らんだろ。
> void *を使ったオーバーヘッドあり
とは何?サイズ管理+アドレスの計算のこと?
だったらC++の汎用コンテナでも同じ事を内部でやっているし、オーバーヘッドはないが。
見た目でしか分からない人はCに向いていないぞ。
というか、型安全が欲しければC++を、
そんなん要らんから小さくて早いコードを、というのならCを、ってだけだろ。
その分自分で管理する項目が増えるだけの話で。
選択肢はユーザー側に与えられているのだから、それ以上は要らんだろ。
637デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 09:15:07.55ID:D96wT16B0638デフォルトの名無しさん (ワッチョイ 1be7-1eaZ)
2018/05/12(土) 09:18:40.30ID:kx3qluwG0 とりあえずスクリプト言語やC#で書く→速くしたい所をC++で書く→もっと速くしたい所をCやasmで書く
これが正解
どれかにこだわって対立させて排他するのはアホ
これが正解
どれかにこだわって対立させて排他するのはアホ
639デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 09:26:19.92ID:PbE4ojLD0 >>638
同意。
若い奴が統一言語「○○だけ勉強すれば全ておk」を求めるのは自然だが、
そうなっていないのは理由があって、つまりは手抜きと実行効率(速度)の兼ね合いだ。
一時期Cが統一言語だったが、それは他言語がゴミだったから(対抗馬がLisp)であって、
C++で再統一されることはないよ。特に今のC++では。
同意。
若い奴が統一言語「○○だけ勉強すれば全ておk」を求めるのは自然だが、
そうなっていないのは理由があって、つまりは手抜きと実行効率(速度)の兼ね合いだ。
一時期Cが統一言語だったが、それは他言語がゴミだったから(対抗馬がLisp)であって、
C++で再統一されることはないよ。特に今のC++では。
640デフォルトの名無しさん (アウアウウー Sa89-5o/y)
2018/05/12(土) 09:31:37.48ID:vhGL8v7ea641デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 09:56:03.80ID:QiJLTR+Nd642デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 10:05:55.31ID:QiJLTR+Nd >>636
CやC++に関わらず専用なコードは汎用に比べて高速コンパクトに出来る事がある
つまり、
void*で作って全てのコンテナサイズ(型)同一コードよりも型ごとにコードを作る方が速いことがある
C++のコンテナは全て専用コードなので
コードの肥大化と引き換えに微妙に速いかもしれない
コードの肥大化によってキャッシュミスして遅い可能性もあるけど
CやC++に関わらず専用なコードは汎用に比べて高速コンパクトに出来る事がある
つまり、
void*で作って全てのコンテナサイズ(型)同一コードよりも型ごとにコードを作る方が速いことがある
C++のコンテナは全て専用コードなので
コードの肥大化と引き換えに微妙に速いかもしれない
コードの肥大化によってキャッシュミスして遅い可能性もあるけど
643デフォルトの名無しさん (ワッチョイ 23b3-pJ79)
2018/05/12(土) 11:33:41.32ID:VFvkGYoW0644デフォルトの名無しさん (ブーイモ MM43-/P3g)
2018/05/12(土) 11:35:17.48ID:tcCubJZ8M >>632
>すでに壊してるのだから
一体どこからそんな主張を読み取ったんだ?
勝手に人の主張を捏造せずに、ちゃんと質問に答えてくれないか?
あと、void*使わなくても、生成時に型サイズを受け取る方法もある。
汎用コンテナ作るのにdefineで型定義なんてするわけないだろう。
>すでに壊してるのだから
一体どこからそんな主張を読み取ったんだ?
勝手に人の主張を捏造せずに、ちゃんと質問に答えてくれないか?
あと、void*使わなくても、生成時に型サイズを受け取る方法もある。
汎用コンテナ作るのにdefineで型定義なんてするわけないだろう。
645デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 11:39:23.77ID:D96wT16B0646デフォルトの名無しさん
2018/05/12(土) 11:44:45.24647デフォルトの名無しさん (ブーイモ MM43-/P3g)
2018/05/12(土) 11:48:55.40ID:tcCubJZ8M648デフォルトの名無しさん (アウアウウー Sa89-bFqk)
2018/05/12(土) 11:52:21.18ID:My8LWy2ka ふぁいなるふぁんたじぃ?
649デフォルトの名無しさん (ワッチョイ cb81-Iyo3)
2018/05/12(土) 11:59:59.40ID:FtdYwxfb0 前輪駆動車じゃない?
650デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 12:14:05.61ID:D96wT16B0 255
651デフォルトの名無しさん (アウアウウー Sa89-bFqk)
2018/05/12(土) 12:31:23.28ID:My8LWy2ka -1
652デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 12:40:45.91ID:QiJLTR+Nd 汎用バイナリ < 汎用コード専用バイナリ < 専用コード
速度的にはこう
速度が非常に重要であれば
CだろうがC++だろうが専用コードを書くのが一番
速度的にはこう
速度が非常に重要であれば
CだろうがC++だろうが専用コードを書くのが一番
653デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 12:42:10.49ID:PbE4ojLD0654デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 12:44:50.30ID:D96wT16B0655デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 12:49:50.14ID:QiJLTR+Nd656デフォルトの名無しさん (ワッチョイ 23b3-pJ79)
2018/05/12(土) 12:50:14.86ID:VFvkGYoW0 >>653
> 間接参照を抜ける場合とかだろ。
それC++のまま書き換えればいいだけ
> 逆にCよりもC++の方が速くなるコードの方があり得ないと思うが。
そんな主張はしてない
> 実際にC++はCより遅いってのは事実だし。
だからどんなケースなんだよ
STLとか使いまくって遅いとかなら使わないように書き換えればいいだけだろ
> 間接参照を抜ける場合とかだろ。
それC++のまま書き換えればいいだけ
> 逆にCよりもC++の方が速くなるコードの方があり得ないと思うが。
そんな主張はしてない
> 実際にC++はCより遅いってのは事実だし。
だからどんなケースなんだよ
STLとか使いまくって遅いとかなら使わないように書き換えればいいだけだろ
657デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 12:58:57.32ID:QiJLTR+Nd 厳密に言うと
C11の可変長配列はC++には無い
C++では例外処理を実現するために関数コールに微妙なオーバーヘッドがある場合がある
って感じでCの方が有利な事がある
どちらもガシガシに最適化した場合の話
C11の可変長配列はC++には無い
C++では例外処理を実現するために関数コールに微妙なオーバーヘッドがある場合がある
って感じでCの方が有利な事がある
どちらもガシガシに最適化した場合の話
658デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:05:00.64ID:QiJLTR+Nd x86-32
例外処理を有効にすると
関数コールに微妙なオーバーヘッドが加わる
x86-64
例外処理の為のオーバーヘッドは無い
その代わり例外発生時の処理は非常に遅い
Cの可変長配列のような、スタックに可変長サイズを確保する手段はC++には無い
当然ダイナミックなメモリアロケートよりはスタックに確保した方が速い
ただし実際にはあまり使われていないと思われる
例外処理を有効にすると
関数コールに微妙なオーバーヘッドが加わる
x86-64
例外処理の為のオーバーヘッドは無い
その代わり例外発生時の処理は非常に遅い
Cの可変長配列のような、スタックに可変長サイズを確保する手段はC++には無い
当然ダイナミックなメモリアロケートよりはスタックに確保した方が速い
ただし実際にはあまり使われていないと思われる
659デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 13:09:56.56ID:PbE4ojLD0660デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 13:11:52.26ID:PbE4ojLD0 >>658
> x86-64
> 例外処理の為のオーバーヘッドは無い
> その代わり例外発生時の処理は非常に遅い
これマジ?
煽りじゃなくて仕組みを知りたいから、キーワードかURLくれ。
こちらでググって確認する。
> x86-64
> 例外処理の為のオーバーヘッドは無い
> その代わり例外発生時の処理は非常に遅い
これマジ?
煽りじゃなくて仕組みを知りたいから、キーワードかURLくれ。
こちらでググって確認する。
661デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:28:22.55ID:QiJLTR+Nd 自分でディスアセンブルしたり
バイナリ比較したり実測してわかったことで
仕組みがまとめて書いてあるような所は知らない
バイナリ比較したり実測してわかったことで
仕組みがまとめて書いてあるような所は知らない
662デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 13:31:21.41ID:PbE4ojLD0 >>656
> だからどんなケースなんだよ
探してやったぞ。
> 実験によれば 6-13% の実行時間が単なる関数のディスパッチに用いられ、オーバーヘッドは場合によって 50% に達する[1]。
> https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A2%E6%95%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
C++は動的な型の変更はなしなので、コンパイル時に対象関数は確定するだろ。それが仮想関数であってもね。
だからvtblを用いた実装自体がコンパイラの単純さを採って、実行速度を捨ててる。
JavaScriptみたいに、実行時に型を変更してしまえる言語ではないのだから、
型毎にテーブルを持つこと自体が冗長で、
テンプレートみたいに、仮想関数が上書きされた毎時点で平面的に展開し、直接それを呼ぶ実装も出来るんだよ。
勿論オブジェクトコードは膨らむが。
Cの場合は、どちらでやるにしても「自前で」実装するしかない。だから当然、選べる。
C++の場合は、選べないでしょ。一般的にvtblの実装になる。(コンパイラの都合だが)
> だからどんなケースなんだよ
探してやったぞ。
> 実験によれば 6-13% の実行時間が単なる関数のディスパッチに用いられ、オーバーヘッドは場合によって 50% に達する[1]。
> https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A2%E6%95%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
C++は動的な型の変更はなしなので、コンパイル時に対象関数は確定するだろ。それが仮想関数であってもね。
だからvtblを用いた実装自体がコンパイラの単純さを採って、実行速度を捨ててる。
JavaScriptみたいに、実行時に型を変更してしまえる言語ではないのだから、
型毎にテーブルを持つこと自体が冗長で、
テンプレートみたいに、仮想関数が上書きされた毎時点で平面的に展開し、直接それを呼ぶ実装も出来るんだよ。
勿論オブジェクトコードは膨らむが。
Cの場合は、どちらでやるにしても「自前で」実装するしかない。だから当然、選べる。
C++の場合は、選べないでしょ。一般的にvtblの実装になる。(コンパイラの都合だが)
663デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:35:45.30ID:QiJLTR+Nd C/C++で基本同じ結果となるコードが書ける
同じ結果となるコードを書けば結果は同じ
ってだけで
当然違う結果となるコードを比べれば違う結果になる
当たり前
同じ結果となるコードを書けば結果は同じ
ってだけで
当然違う結果となるコードを比べれば違う結果になる
当たり前
664デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 13:36:37.92ID:PbE4ojLD0665デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:38:15.87ID:QiJLTR+Nd クラス関数はthisを第一パラメータとして渡してるだけで、これは構造体でも同じことが出来る
virtual関数は関数ポインタテーブルへのポインタを持ってるだけ
同じことは当然Cの構造体でも出来る
テンプレートは型ごとにコードを書くのと同じ
virtual関数は関数ポインタテーブルへのポインタを持ってるだけ
同じことは当然Cの構造体でも出来る
テンプレートは型ごとにコードを書くのと同じ
666デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 13:39:04.83ID:PbE4ojLD0667デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:41:20.71ID:QiJLTR+Nd668デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:42:51.66ID:QiJLTR+Nd >>666
君独自の定義とか持ち出さないでくれ
君独自の定義とか持ち出さないでくれ
669デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 13:44:31.67ID:PbE4ojLD0 >>665
> virtual関数は関数ポインタテーブルへのポインタを持ってるだけ
> 同じことは当然Cの構造体でも出来る
Cでやる場合は、関数ポインタを引数で渡すことも出来るんだよ。
(勿論C++でも出来るが、クラスを使う意味が無くなるから普通はやらない)
この場合、間接参照が抜ける分だけ速くなる。
(実際はメモリアクセス1個よりはキャッシュを壊すことの影響の方が大きいとは思うが)
> virtual関数は関数ポインタテーブルへのポインタを持ってるだけ
> 同じことは当然Cの構造体でも出来る
Cでやる場合は、関数ポインタを引数で渡すことも出来るんだよ。
(勿論C++でも出来るが、クラスを使う意味が無くなるから普通はやらない)
この場合、間接参照が抜ける分だけ速くなる。
(実際はメモリアクセス1個よりはキャッシュを壊すことの影響の方が大きいとは思うが)
670デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:45:03.28ID:QiJLTR+Nd C++独自の機能を使うとCより常に遅い?
それは嘘だな
それは嘘だな
671デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:47:32.05ID:QiJLTR+Nd672デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 13:49:15.64ID:PbE4ojLD0673デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:51:18.48ID:QiJLTR+Nd674デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 13:53:21.45ID:QiJLTR+Nd675デフォルトの名無しさん
2018/05/12(土) 13:53:48.97 >>658って単に32bitプログラムを64bit CPUで走らせてオーバーヘッドがーって言ってるんじゃね?
676デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:01:29.48ID:PbE4ojLD0 >>674
君は理解できてないようだから、定義を確認しておこう。
ただしこれは一般的な解釈であり、おそらくこのスレの住民は共有してる。
・テンプレート、クラス構文、スマポ等、
C++コンパイラではないと通らない機能を使ったコードを、C++のコードという。
・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。
> 一般に、カーネルモジュールをC++で設計するやつは、以下のいずれかだ。
>
> (a) 好んで厄介事に巻き込まれたい者
> (b) 自分が書いているのは実はCだと気がついていないC++バカ
> (c) 授業でそういう課題を与えられた者
>
> (d)を付け加えるなら好きにしてくれ。
>
> Linus
> https://cpplover.blogspot.jp/2013/05/linus-torvalsc.html
君は多分(b)だね。
今の話題はC++のコードとCのコードの速度比較ということでよろしく。
>>673
> C++で最適化に行き詰まった時に
> わざわざコンパイラをCに変えて最適化する事なんてないから
そんな話は誰もしてない。
勿論その場合はCのコードに変更し、C++コンパイラを使うに決まっている。
じゃないと他の部分が通らないだろ。
君の定義は、C++コンパイラを使っていればどういう書き方であってC++ということだったのか。
なら話は噛み合わないさ。
君は理解できてないようだから、定義を確認しておこう。
ただしこれは一般的な解釈であり、おそらくこのスレの住民は共有してる。
・テンプレート、クラス構文、スマポ等、
C++コンパイラではないと通らない機能を使ったコードを、C++のコードという。
・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。
> 一般に、カーネルモジュールをC++で設計するやつは、以下のいずれかだ。
>
> (a) 好んで厄介事に巻き込まれたい者
> (b) 自分が書いているのは実はCだと気がついていないC++バカ
> (c) 授業でそういう課題を与えられた者
>
> (d)を付け加えるなら好きにしてくれ。
>
> Linus
> https://cpplover.blogspot.jp/2013/05/linus-torvalsc.html
君は多分(b)だね。
今の話題はC++のコードとCのコードの速度比較ということでよろしく。
>>673
> C++で最適化に行き詰まった時に
> わざわざコンパイラをCに変えて最適化する事なんてないから
そんな話は誰もしてない。
勿論その場合はCのコードに変更し、C++コンパイラを使うに決まっている。
じゃないと他の部分が通らないだろ。
君の定義は、C++コンパイラを使っていればどういう書き方であってC++ということだったのか。
なら話は噛み合わないさ。
677デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:05:34.23ID:D96wT16B0 #define SIZE 100000000
long long array[SIZE];
int comp(void const* lhs, void const* rhs)
{
if(*(long long*)lhs < *(long long*)rhs) return -1;
if(*(long long*)lhs > *(long long*)rhs) return +1;
return 0;
}
int main(void)
{
clock_t t0 = clock();
qsort(array, SIZE, sizeof(long long), comp);
clock_t t1 = clock();
printf("%g[sec]\n", (double)(t1 - t0) / CLOCKS_PER_SEC); //2.288[sec]
}
long long array[SIZE];
int comp(void const* lhs, void const* rhs)
{
if(*(long long*)lhs < *(long long*)rhs) return -1;
if(*(long long*)lhs > *(long long*)rhs) return +1;
return 0;
}
int main(void)
{
clock_t t0 = clock();
qsort(array, SIZE, sizeof(long long), comp);
clock_t t1 = clock();
printf("%g[sec]\n", (double)(t1 - t0) / CLOCKS_PER_SEC); //2.288[sec]
}
678デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:06:21.60ID:D96wT16B0 #define SIZE 100000000
long long array[SIZE];
int main(void)
{
clock_t t0 = clock();
std::sort(array, array + SIZE, std::less<long long>());
clock_t t1 = clock();
printf("%g[sec]\n", (double)(t1 - t0) / CLOCKS_PER_SEC); //8.245[sec] ・・・あれ? 何だこりゃ
}
long long array[SIZE];
int main(void)
{
clock_t t0 = clock();
std::sort(array, array + SIZE, std::less<long long>());
clock_t t1 = clock();
printf("%g[sec]\n", (double)(t1 - t0) / CLOCKS_PER_SEC); //8.245[sec] ・・・あれ? 何だこりゃ
}
679デフォルトの名無しさん (ワッチョイ 23b3-pJ79)
2018/05/12(土) 14:07:22.82ID:VFvkGYoW0680デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:14:29.71ID:PbE4ojLD0681デフォルトの名無しさん (ワッチョイ 23b3-pJ79)
2018/05/12(土) 14:14:45.58ID:VFvkGYoW0 >>676
> ・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。
可変長配列とか使ってないならC++のコードでもある
つまりC++の範疇で書き直してるだけ
って言うのが大方の人の解釈だと思うが
> ・その他、関数ポインタ等、Cコンパイラでも通る機能のみで書かれたコードを、Cのコードという。
可変長配列とか使ってないならC++のコードでもある
つまりC++の範疇で書き直してるだけ
って言うのが大方の人の解釈だと思うが
682デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:18:31.88ID:D96wT16B0683デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 14:20:49.93ID:QiJLTR+Nd684デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:22:26.74ID:PbE4ojLD0685デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:26:21.88ID:D96wT16B0 >>676
たとえばヘッダファイルなんか、同一のファイルを
Cコンパイラに入力したり
C++コンパイラに入力したり
ってこともあるよな
内容には無関係で単に
Cコンパイラに入力したらCのコードで
C++コンパイラに入力したらC++のコードだろ
最適化の内容だってrestrictのように
CとC++で違ってくる可能性はあるしな
たとえばヘッダファイルなんか、同一のファイルを
Cコンパイラに入力したり
C++コンパイラに入力したり
ってこともあるよな
内容には無関係で単に
Cコンパイラに入力したらCのコードで
C++コンパイラに入力したらC++のコードだろ
最適化の内容だってrestrictのように
CとC++で違ってくる可能性はあるしな
686デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:27:02.49ID:PbE4ojLD0 >>682
最適化の掛け忘れでは?
Cの方はほぼ最適コードだが、(メモリアクセス減らして一時変数に取れとかその程度)
C++の方は最適化無しだとトンデモコードが出てくるが、
最適化でそれを消すからおkというノリだったと思ったぞ。
最適化無し同士の比較は意味がない。最大最適化同士の比較やってみそ。
最適化の掛け忘れでは?
Cの方はほぼ最適コードだが、(メモリアクセス減らして一時変数に取れとかその程度)
C++の方は最適化無しだとトンデモコードが出てくるが、
最適化でそれを消すからおkというノリだったと思ったぞ。
最適化無し同士の比較は意味がない。最大最適化同士の比較やってみそ。
687デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 14:27:22.97ID:QiJLTR+Nd 使うモジュールの差を言語で言うから話が紛れる
で、
君の定義であるごく一般的な記述を行った場合の話であれば
C++の方が速いこともあるしCの方が速いこともある
C++はテンプレートによって専用のコードをたくさん作る
当然汎用バイナリよりも専用バイナリの方が最適化がかかりやすいし、
変数よりも即値の方が速いことも多い
C++例外処理も有効で、
これによって処理が速くなる場合がある
で、
君の定義であるごく一般的な記述を行った場合の話であれば
C++の方が速いこともあるしCの方が速いこともある
C++はテンプレートによって専用のコードをたくさん作る
当然汎用バイナリよりも専用バイナリの方が最適化がかかりやすいし、
変数よりも即値の方が速いことも多い
C++例外処理も有効で、
これによって処理が速くなる場合がある
688デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:27:42.28ID:D96wT16B0 >>686
gcc unko.c -O3でやってる
gcc unko.c -O3でやってる
689デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:29:31.07ID:PbE4ojLD0690デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 14:30:30.03ID:QiJLTR+Nd691デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:35:18.35ID:PbE4ojLD0 >>687
> 君の定義であるごく一般的な記述を行った場合の話であれば
> C++の方が速いこともあるしCの方が速いこともある
ねーよ。
実例挙げてみ?
それって単なるコンパイラの適性であって、コード自体の速度ではないだろ。
C++とCの本質的な速度差ってのは絶対にひっくり返らないものであって、
例えば、スマポを使っている限り参照ポインタを管理する分だけ遅くなる、というもの。
コンパイラがどう進化しても、「0」「ADDまたはDEC命令」の差はひっくり返らないんだよ。
> C++例外処理も有効で、
> これによって処理が速くなる場合がある
ねーよ。Cは最初から全部noexceptだ。
> 君の定義であるごく一般的な記述を行った場合の話であれば
> C++の方が速いこともあるしCの方が速いこともある
ねーよ。
実例挙げてみ?
それって単なるコンパイラの適性であって、コード自体の速度ではないだろ。
C++とCの本質的な速度差ってのは絶対にひっくり返らないものであって、
例えば、スマポを使っている限り参照ポインタを管理する分だけ遅くなる、というもの。
コンパイラがどう進化しても、「0」「ADDまたはDEC命令」の差はひっくり返らないんだよ。
> C++例外処理も有効で、
> これによって処理が速くなる場合がある
ねーよ。Cは最初から全部noexceptだ。
692デフォルトの名無しさん (スップ Sd03-c79c)
2018/05/12(土) 14:35:49.71ID:QiJLTR+Nd ソートって
メモリサイズ
比較コスト
コピーコスト
キャッシュサイズ
...
こんなんで結果(時間)が大きく異なるんだよね
クイックソートだと
データの並び順でもたまたま選んだピボット値でも変わる
1個の場合を比較してもあまり意味が無いぞ
メモリサイズ
比較コスト
コピーコスト
キャッシュサイズ
...
こんなんで結果(時間)が大きく異なるんだよね
クイックソートだと
データの並び順でもたまたま選んだピボット値でも変わる
1個の場合を比較してもあまり意味が無いぞ
693デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:36:05.87ID:D96wT16B0694デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:36:46.83ID:D96wT16B0695デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:37:45.07ID:PbE4ojLD0696デフォルトの名無しさん (ワッチョイ e358-k37M)
2018/05/12(土) 14:37:57.15ID:D96wT16B0 >>689
ん? なんで?
ん? なんで?
697デフォルトの名無しさん (ワッチョイ 059f-YHaA)
2018/05/12(土) 14:44:25.97ID:PbE4ojLD0 >>693
それさ、以下の3条件でやってみ。
1) Cのコード(677)を、Cコンパイラ
2) Cのコード(677)を、C++コンパイラ ←追加
3) C++のコー(678)を、C++コンパイラ
Cコンパイラってポインタ周りは最適化をかけないから、多分、
速度差はコンパイラ起因であって、コード起因では無いと思う。
それさ、以下の3条件でやってみ。
1) Cのコード(677)を、Cコンパイラ
2) Cのコード(677)を、C++コンパイラ ←追加
3) C++のコー(678)を、C++コンパイラ
Cコンパイラってポインタ周りは最適化をかけないから、多分、
速度差はコンパイラ起因であって、コード起因では無いと思う。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★4 [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 【高市速報】中国、最後通牒 [308389511]
- 「〜だろ」って言い方やめないか?「でしょ」とか「だよね」にしようぜ [793117252]
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
- お前らダウナー系だよな
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ182
- 精液がゼリー状で黄ばんでるせいで女と付き合う勇気ない
