次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part135
https://mevius.5ch.net/test/read.cgi/tech/1522495206/
このスレもよろしくね。
【初心者歓迎】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++相談室 part136
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ bf81-LHz9)
2018/06/07(木) 23:40:12.36ID:GNQuDMaA0726デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/07(土) 17:26:09.82ID:vaOvOKvn0 パフォーマンスを気にするときは
乗算すら除きたいわけで
乗算すら除きたいわけで
727デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 17:33:51.53ID:4FQUFFqD0728デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/07(土) 17:59:13.38ID:LxSGsocZ0729デフォルトの名無しさん (ワッチョイ 678a-K9rx)
2018/07/07(土) 18:05:35.89ID:xCeElJD00 >>728
そうか?画像を90度回してみてくれ
そうか?画像を90度回してみてくれ
730デフォルトの名無しさん (ワッチョイ df7e-/Wz9)
2018/07/07(土) 18:06:41.64ID:n3/QBjsU0 スペック上げて殴れ
731デフォルトの名無しさん (ワッチョイ 478a-CyKI)
2018/07/07(土) 18:11:02.14ID:7Amz+9JA0 殴らなくてもモニターを横にすればいいだけじゃ
732デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 18:26:37.83ID:4FQUFFqD0 画像を90度回すつもりで
for (py=0; py<height; py++) {
for (px=0; px<width; px++) {
dst[px][py]=src[py][px]
}
}
と書いたとしたら、ループ内ではwidth、heightともに定数とみなせるからループ最適化が効いて
dst、srcとも要素特定演算が加算のみになる可能性が微レ存、
この点>>702案に対して>>714のoperator[]はボロいコンパイラの場合は最適化機会を見逃す危険性は高いが
コンパイラからみてarrayに対する副作用がわからない関数呼び出しは含まれないから、原理的に最適化不可能というほどではない。
for (py=0; py<height; py++) {
for (px=0; px<width; px++) {
dst[px][py]=src[py][px]
}
}
と書いたとしたら、ループ内ではwidth、heightともに定数とみなせるからループ最適化が効いて
dst、srcとも要素特定演算が加算のみになる可能性が微レ存、
この点>>702案に対して>>714のoperator[]はボロいコンパイラの場合は最適化機会を見逃す危険性は高いが
コンパイラからみてarrayに対する副作用がわからない関数呼び出しは含まれないから、原理的に最適化不可能というほどではない。
733デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 19:01:02.34ID:4FQUFFqD0 ていうかこれで良くね?
ttp://codepad.org/2sMvNgye
ttp://codepad.org/2sMvNgye
734デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/07(土) 19:21:35.06ID:LxSGsocZ0735デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 19:26:22.85ID:4FQUFFqD0736デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 19:35:42.78ID:kLxolQc60 やっぱりな知恵遅れのバカどもはなにも分かってないわ。。。
演算処理で一番ボトルネックになるのはメモリアクセスだからな
高速な演算をしたいのにメモリをあちこちバラバラに配置する知恵遅れはいない
局所参照性を無視して乗算がどうこうといってるレベルだからな。。。
知恵遅れたちにはCPUのキャッシュという概念がない
vector1個のほうが
メモリフラグメンテーションもおきにくいし
このスレのバカどもがどうこういってる演算においても激しく有利だからな
良い子のみんなはこのスレのバカどもがいうことなんか
マに受けたりしたらダメだからな
オレの書き込みだけ信じればいい
演算処理で一番ボトルネックになるのはメモリアクセスだからな
高速な演算をしたいのにメモリをあちこちバラバラに配置する知恵遅れはいない
局所参照性を無視して乗算がどうこうといってるレベルだからな。。。
知恵遅れたちにはCPUのキャッシュという概念がない
vector1個のほうが
メモリフラグメンテーションもおきにくいし
このスレのバカどもがどうこういってる演算においても激しく有利だからな
良い子のみんなはこのスレのバカどもがいうことなんか
マに受けたりしたらダメだからな
オレの書き込みだけ信じればいい
737デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 19:53:26.81ID:kLxolQc60 ttp://codepad.org/2sMvNgye
↑アホが書いた典型的なサンプル
良い子のみんなはマネしないようにな
こんなアホがいるというサンプルになってる
http://d.hatena.ne.jp/pknight/touch/20100330/1269945131
↑同じアホでもまだこっちのがマシ
あいかわらずオレのレスは
いつでも針の穴を通すようなカンペキなレスだ
↑アホが書いた典型的なサンプル
良い子のみんなはマネしないようにな
こんなアホがいるというサンプルになってる
http://d.hatena.ne.jp/pknight/touch/20100330/1269945131
↑同じアホでもまだこっちのがマシ
あいかわらずオレのレスは
いつでも針の穴を通すようなカンペキなレスだ
738デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/07(土) 19:57:56.70ID:O2wU114Q0 つ valarray
739デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 19:58:36.71ID:4FQUFFqD0 >>736
行列のrowを個別のstd::vector<T>とすることによる局所参照性の劣化は
ラスタスキャン順アクセスにおいて第i行から第i+1行に改行する時のみに限られる
(特にたまたま行列の横幅がキャッシュラインサイズの倍数でありかつ行がキャッシュラインに整列しているならば、何のペナルティーも生じない
ランダムアクセスならどっちもどっちになるからでかい配列の場合は言うほど気にしなくて良いんじゃ…
行列のrowを個別のstd::vector<T>とすることによる局所参照性の劣化は
ラスタスキャン順アクセスにおいて第i行から第i+1行に改行する時のみに限られる
(特にたまたま行列の横幅がキャッシュラインサイズの倍数でありかつ行がキャッシュラインに整列しているならば、何のペナルティーも生じない
ランダムアクセスならどっちもどっちになるからでかい配列の場合は言うほど気にしなくて良いんじゃ…
740デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/07(土) 20:41:37.82ID:vaOvOKvn0 パフォーマンス優先なら
メモリは連続
要素へのアクセスはシンプルに
[][] にこだわる必要はない
(x, y) や [座標] なども考える
乗算が遅い環境なら
要素数は2^nの形にするとか位置をキャッシュするとか
固定座標の処理で良いものはコンパイル時に決定出来るようにとか
メモリは連続
要素へのアクセスはシンプルに
[][] にこだわる必要はない
(x, y) や [座標] なども考える
乗算が遅い環境なら
要素数は2^nの形にするとか位置をキャッシュするとか
固定座標の処理で良いものはコンパイル時に決定出来るようにとか
741デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/07(土) 20:49:15.42ID:vaOvOKvn0 コンパイラをあてにするなら
生ポが一番最適化が効く
このスレだと拒否反応を示す人がいるだろうマクロを使うとか
生ポが一番最適化が効く
このスレだと拒否反応を示す人がいるだろうマクロを使うとか
742デフォルトの名無しさん (ワッチョイ 672d-CsAW)
2018/07/07(土) 21:35:08.81ID:2pqJGsxY0 MTPでコンパイルタイムに押し込めー わぁい!
と、5,6年前にやったときは8x9行列ぐらいで
gccのテンプレート展開の限界になった記憶がある
と、5,6年前にやったときは8x9行列ぐらいで
gccのテンプレート展開の限界になった記憶がある
743デフォルトの名無しさん (アウアウウー Sa0b-sule)
2018/07/07(土) 23:53:17.73ID:HbEbhDY0a LINUXで15GBくらいのテキストファイルを読み込みこんでGUIを作ろうとしています。
ファイルが大きいため速度が出せる言語で、かつGUI作成は情報量が多いと調べやすいので、まあまあメジャーな無料のGUIライブラリを使用したいと思っています。
perl>>python>>>>C++ の順で経験があり、C++はあまり詳しくないですが、速度重視でC++で行こうと検討しています。
GUIライブラリを調べているのですが、C++のGUIはあまり情報を見つけられず、めぼしいのはQtくらいしか目に付きませんでした。
会社のサーバのローカルディレクトリにQtをインストールしてみましたが、必要なライブラリが古かったりで、インストールできませんでした。
他に何かおすすめなGUIライブラリはありますでしょうか?
ファイルが大きいため速度が出せる言語で、かつGUI作成は情報量が多いと調べやすいので、まあまあメジャーな無料のGUIライブラリを使用したいと思っています。
perl>>python>>>>C++ の順で経験があり、C++はあまり詳しくないですが、速度重視でC++で行こうと検討しています。
GUIライブラリを調べているのですが、C++のGUIはあまり情報を見つけられず、めぼしいのはQtくらいしか目に付きませんでした。
会社のサーバのローカルディレクトリにQtをインストールしてみましたが、必要なライブラリが古かったりで、インストールできませんでした。
他に何かおすすめなGUIライブラリはありますでしょうか?
744デフォルトの名無しさん (ワッチョイ df7e-/Wz9)
2018/07/07(土) 23:56:16.40ID:n3/QBjsU0 公開しないならQtしかないしいつまでも古いライブラリを入れておくな
745デフォルトの名無しさん (ワッチョイ 5f1b-gqST)
2018/07/08(日) 00:24:35.82ID:wBhl3HXd0 imguiはどう?
746デフォルトの名無しさん (ワッチョイ a7d2-UVFs)
2018/07/08(日) 00:26:37.61ID:ib3y3idC0 GUIはTkライブラリをPerl/Pythonで作り、重い処理はC/C++プログラムとプロセス間通信と行うのがいいんじゃないですかね。
747デフォルトの名無しさん (ワッチョイ 67bd-aMDz)
2018/07/08(日) 00:40:55.76ID:Jzinsuog0 15gbのデータはguiでeditするの?
それともread onlyな入力データ?
それともread onlyな入力データ?
748デフォルトの名無しさん (ワッチョイ 87b3-SSkB)
2018/07/08(日) 01:20:06.11ID:ctFpH6QP0 個人的にはwxWidgetsを推す
749デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 01:24:30.59ID:zc7zM8II0 どんなテキスト?
完全な自由フォーマット?
完全な自由フォーマット?
750デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 01:37:33.05ID:zc7zM8II0 15GBだと読み込みだけで分単位の時間がかかる
UIも難しい
巨大テキストからどうやって表示箇所を選ぶ?
スクロールバーとページめくりだけじゃ目的の箇所を探せないよ
行番号指定ジャンプ?
15GBだとメモリコピーでも秒オーダーの時間がかかるから
1文字入力するごとに後ろをずらすなんてことも出来ないから
データの持ち方も工夫しないと
そもそもメモリに収まりきるのか?
RAMは何ギガ?
UIも難しい
巨大テキストからどうやって表示箇所を選ぶ?
スクロールバーとページめくりだけじゃ目的の箇所を探せないよ
行番号指定ジャンプ?
15GBだとメモリコピーでも秒オーダーの時間がかかるから
1文字入力するごとに後ろをずらすなんてことも出来ないから
データの持ち方も工夫しないと
そもそもメモリに収まりきるのか?
RAMは何ギガ?
751デフォルトの名無しさん (ワッチョイ 7f81-Gfd3)
2018/07/08(日) 01:58:53.01ID:fRwyFHTq0 サーバーって事だから、いっそ使いやすい型式でDBに格納し、
Web画面で表示するっていうのはどうだろう
グラフィック表示はクライアント側に任せてしまう
Web画面で表示するっていうのはどうだろう
グラフィック表示はクライアント側に任せてしまう
752デフォルトの名無しさん (ワッチョイ 478a-CyKI)
2018/07/08(日) 02:43:06.14ID:Qh5q4wMA0 全部で15GBのテキストじゃないの?
流石に1個で15GBは… 円周率のテキストファイルとかならあり得るか
流石に1個で15GBは… 円周率のテキストファイルとかならあり得るか
753デフォルトの名無しさん (ワッチョイ 5ff8-UVFs)
2018/07/08(日) 05:15:51.48ID:qIOhFZFQ0 mmapかねえ
754デフォルトの名無しさん (アウアウウー Sa0b-sule)
2018/07/08(日) 10:36:48.41ID:FCqbYUBUa >>744-753
色々な情報ありがとうございます。
>>744
gccなど単体でインストールできるものはローカルディレクトリに最新をインストールしたのですが、
Qtに必要な何かのライブラリの最新版をインストールするのに文字コードがc.utf8が必要なのですが、
今はja_JP.UTF-8しか選択できず、新しい文字コードを使うにはrootでの文字コード再生成が必要なため全体への影響を考え一旦保留としています。
>>745,748
候補としてちょっと調べてみます。
>>746
PythonならCython+Kivyで直接取り込もうと検討しています。
その場合、CythonがどこまでC++の速度に迫れるかの調査から始める必要があるのですが…
少し調べたらCython内で直接C++コードを書ける云々とあったからそれだと速度はクリアできるのかなぁ?というところで一旦ストップしています。
これは深い話するとちょっとスレチな内容になってきますね。。
ちなみに今回作ったものをTCP通信で別のプログラムに接続して使用する予定です。
>>747
Read Onlyで読み込み時に演算したりarray、unordered_map、構造体などに放り込んだりして加工して取り込んだあとは参照のみです。
751さんの話は一旦形式をDBで保存しそれを参照ですが、それに近い感じで使いやすい形式に変換したものをメモリに格納し参照するイメージです。
色々な情報ありがとうございます。
>>744
gccなど単体でインストールできるものはローカルディレクトリに最新をインストールしたのですが、
Qtに必要な何かのライブラリの最新版をインストールするのに文字コードがc.utf8が必要なのですが、
今はja_JP.UTF-8しか選択できず、新しい文字コードを使うにはrootでの文字コード再生成が必要なため全体への影響を考え一旦保留としています。
>>745,748
候補としてちょっと調べてみます。
>>746
PythonならCython+Kivyで直接取り込もうと検討しています。
その場合、CythonがどこまでC++の速度に迫れるかの調査から始める必要があるのですが…
少し調べたらCython内で直接C++コードを書ける云々とあったからそれだと速度はクリアできるのかなぁ?というところで一旦ストップしています。
これは深い話するとちょっとスレチな内容になってきますね。。
ちなみに今回作ったものをTCP通信で別のプログラムに接続して使用する予定です。
>>747
Read Onlyで読み込み時に演算したりarray、unordered_map、構造体などに放り込んだりして加工して取り込んだあとは参照のみです。
751さんの話は一旦形式をDBで保存しそれを参照ですが、それに近い感じで使いやすい形式に変換したものをメモリに格納し参照するイメージです。
755754 (アウアウウー Sa0b-sule)
2018/07/08(日) 10:39:18.44ID:FCqbYUBUa つづき
>>749,750
固定フォーマットです。
メモリはサーバなので数百GBはあります。
>>752
1ファイルなんです。。
解析ソフトから出力された結果です。
>>753
mmapぐぐったらI/Oがネックなときに効果が期待できるものなんですね。
今調べてわかったところでは、
[1-1] fgetsのみ→30秒以下
[1-2] ・fgets, sscanf, fscanfを組み合わせてフォーマットに沿って読み込む→約5分
だったので、scanの変数格納が支配的になりそうなので、次は下記を調査しようと思っています。
[2-2] freadでバイナリで読み込んで空白、改行を判定しながら必要なところだけ文字列や数値に変換すると早いか?
[2-3] fgetcで空白、改行を判定し直接charに入れて行くと早いか?↓
char a[1024];
i=0;
while ( (a[i]=fgetc(fp)) != EOF){
if(a[i] == " "){
a[i] = "\0"; //\0を入れるとそこまでをcharの文字列として扱ってくれる??
break;
}
i++;
}
>>749,750
固定フォーマットです。
メモリはサーバなので数百GBはあります。
>>752
1ファイルなんです。。
解析ソフトから出力された結果です。
>>753
mmapぐぐったらI/Oがネックなときに効果が期待できるものなんですね。
今調べてわかったところでは、
[1-1] fgetsのみ→30秒以下
[1-2] ・fgets, sscanf, fscanfを組み合わせてフォーマットに沿って読み込む→約5分
だったので、scanの変数格納が支配的になりそうなので、次は下記を調査しようと思っています。
[2-2] freadでバイナリで読み込んで空白、改行を判定しながら必要なところだけ文字列や数値に変換すると早いか?
[2-3] fgetcで空白、改行を判定し直接charに入れて行くと早いか?↓
char a[1024];
i=0;
while ( (a[i]=fgetc(fp)) != EOF){
if(a[i] == " "){
a[i] = "\0"; //\0を入れるとそこまでをcharの文字列として扱ってくれる??
break;
}
i++;
}
756754 (アウアウウー Sa0b-sule)
2018/07/08(日) 10:52:07.74ID:FCqbYUBUa あとは下記URLの「ファイルは一括で読み込め」の読み込み速度はどうかも調べてみる予定です。
ttps://qiita.com/kotauchisunsun/items/84e01c6fb621fcc1a647
それと下記も高速化のコーディングの参考にしようかと。
ttps://heavywatal.github.io/cxx/speed.html
ttps://qiita.com/kotauchisunsun/items/84e01c6fb621fcc1a647
それと下記も高速化のコーディングの参考にしようかと。
ttps://heavywatal.github.io/cxx/speed.html
757デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:00:23.53ID:zc7zM8II0 読み込みと解析は別スレッド
解析はマルチスレッド
関数は専用化
AVXなどのリッチな命令を活用する
キャッシュを効率的に使う(何度も全体スキャンしない)
一般的な効率化技術
解析はマルチスレッド
関数は専用化
AVXなどのリッチな命令を活用する
キャッシュを効率的に使う(何度も全体スキャンしない)
一般的な効率化技術
758デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:22:12.48ID:zc7zM8II0 fgetc, scanf, printfのような激遅関数は使わない
ファイルは大きな単位で読み込む (MB以上)
ファイルは大きな単位で読み込む (MB以上)
759デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:37:23.14ID:zc7zM8II0760デフォルトの名無しさん (ワッチョイ df7e-/Wz9)
2018/07/08(日) 11:52:14.55ID:7cBfk+Rf0 ssd使え
761デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:55:19.27ID:zc7zM8II0 15GB 30秒ってことは
HDDから読んでるわけではなさそう
キャッシュかSSD
HDDから読んでるわけではなさそう
キャッシュかSSD
762デフォルトの名無しさん (ワッチョイ 5f12-Rmg1)
2018/07/08(日) 14:39:20.17ID:xrorYcun0 まずは激遅でもいいからperlのGUIとDLL呼び出しで一通り動くものを作った方が良さそう
763デフォルトの名無しさん (ワッチョイ 4704-g8qq)
2018/07/08(日) 17:08:24.55ID:3Zh5d1Fm0 メモリ数百あるんなら、展開した後のデータ構造工夫しろ。
数ギガ読めるテキストエディタを夢想してみれ。
数ギガ読めるテキストエディタを夢想してみれ。
764デフォルトの名無しさん (ワッチョイ 5ff8-UVFs)
2018/07/08(日) 18:27:44.90ID:qIOhFZFQ0 数ギガを一気読みでオンメモリとか蹴り入るな
765デフォルトの名無しさん (ワッチョイ bf7f-6BMs)
2018/07/08(日) 19:48:36.43ID:h0tkW0Td0 コンバート系アプリだと専用端末だったりするしよくある
766デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 22:07:57.31ID:IBdHDRbb0 まず固定長なら1行のバッファから読みこむだけの仕組みを作ってからの話になる
はっきりいって固定長のレイアウトに従って読みこむだけだからな
読みこみ処理の最適化なんかその後の話になる
固定長でなにをそんなに手こずってるのか意味が分からないしな
レコードのサイズはきまってるのに
fscanfとか書いてるということは末尾に改行が入ったレイアウトなのはなんとなく推定できる
レスを読んでもそもそも1レコードのサイズが何バイトなのか分かってて作ってるのかどうかすら怪しい
ファイルサイズをレコードサイズで割ってちゃんと整数になってるかとか確認してるのかどうかすらも怪しいからな
ファイルサイズだけ書いてレコード数すら書いてないしな
とにかく頭悪いヤツがしょうもないことで四苦八苦してるのは分かる
はっきりいって固定長のレイアウトに従って読みこむだけだからな
読みこみ処理の最適化なんかその後の話になる
固定長でなにをそんなに手こずってるのか意味が分からないしな
レコードのサイズはきまってるのに
fscanfとか書いてるということは末尾に改行が入ったレイアウトなのはなんとなく推定できる
レスを読んでもそもそも1レコードのサイズが何バイトなのか分かってて作ってるのかどうかすら怪しい
ファイルサイズをレコードサイズで割ってちゃんと整数になってるかとか確認してるのかどうかすらも怪しいからな
ファイルサイズだけ書いてレコード数すら書いてないしな
とにかく頭悪いヤツがしょうもないことで四苦八苦してるのは分かる
767754 (アウアウウー Sa0b-sule)
2018/07/08(日) 22:10:28.88ID:nff2cMgla 色々ご意見ありがとうございます。
まずは>>759さんのおっしゃるように、>>758さんのケアをしようと思うのですが、今のfgets+sscanfの組み合わせは下記URLを参考にしたのですが、
どれが激遅でどれが高速かの情報はどこかにあったりしますでしょうか?
(試そうと思っていたfgetcは遅いんですね…)
ttp://d.hatena.ne.jp/s-yata/20100726/1280138663
読み込み時に必要なのは、改行の判定、文字列の判定、int型で読み込んで0.025や0.1などを掛けてfloat型で保持(おそらくこれが一番多い処理)、と考えています。
ちなみに入力フォーマットは、ここから何行は文字列、ここから何行は数字の列(intに掛け算しfloatで保持したい)、という感じになっています。
最適な関数はどんな組み合わせが考えられますでしょうか?
STRING 2
AAA BBB
CCC
INT_TO_FLOAT 10
100 100 110 110
101 101 200 200
〜あと8行
まずは>>759さんのおっしゃるように、>>758さんのケアをしようと思うのですが、今のfgets+sscanfの組み合わせは下記URLを参考にしたのですが、
どれが激遅でどれが高速かの情報はどこかにあったりしますでしょうか?
(試そうと思っていたfgetcは遅いんですね…)
ttp://d.hatena.ne.jp/s-yata/20100726/1280138663
読み込み時に必要なのは、改行の判定、文字列の判定、int型で読み込んで0.025や0.1などを掛けてfloat型で保持(おそらくこれが一番多い処理)、と考えています。
ちなみに入力フォーマットは、ここから何行は文字列、ここから何行は数字の列(intに掛け算しfloatで保持したい)、という感じになっています。
最適な関数はどんな組み合わせが考えられますでしょうか?
STRING 2
AAA BBB
CCC
INT_TO_FLOAT 10
100 100 110 110
101 101 200 200
〜あと8行
768デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 22:15:17.90ID:IBdHDRbb0 知恵遅れはそれを固定長とかいってんのか
なるほどな
まず知恵遅れとは語彙の一致が成立してない
なるほどな
まず知恵遅れとは語彙の一致が成立してない
769754 (アウアウウー Sa0b-sule)
2018/07/08(日) 22:17:42.92ID:nff2cMgla 一行に存在する文字数は固定されておらず、文字列の方は文字数や空白は関係なしに単純に行数分読み込むだけで良いです。
数字の方も桁数は固定されていませんが、空白区切りの4カラムと固定されています。
STRING 3
This is pen.
hoge piyo
hello world.
INT_TO_FLOAT 9
12345 1000 10 12
101 101 999999 444
〜あと7行
数字の方も桁数は固定されていませんが、空白区切りの4カラムと固定されています。
STRING 3
This is pen.
hoge piyo
hello world.
INT_TO_FLOAT 9
12345 1000 10 12
101 101 999999 444
〜あと7行
770デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/08(日) 22:17:59.21ID:q7fGM+tb0 少しは自分で考えろよこのバカ
771デフォルトの名無しさん (ワッチョイ 5f4c-EHpb)
2018/07/08(日) 22:18:06.37ID:KcgYXOta0 >>768
固定長フォーマットとは言ってないな
固定長フォーマットとは言ってないな
772デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 22:36:50.70ID:IBdHDRbb0 1行目はisspaceでぐりぐり回して
SPを\0でおきかえればオシマイ
コレでバッファの先頭のポインタで文字列が拾える
行数は\0のポインタを1バイト分進めて
そのポインタをstrtolに渡せば拾える
2行目以降の数字は
strtolやstrtodで空白に到達したら、
その到達した位置のポインタが引数で拾える
数値も拾える
2行目以降の文字列は省略
池沼でも拾える
ここまで書けばどんなドカタでも作業はできるハズだ
SPを\0でおきかえればオシマイ
コレでバッファの先頭のポインタで文字列が拾える
行数は\0のポインタを1バイト分進めて
そのポインタをstrtolに渡せば拾える
2行目以降の数字は
strtolやstrtodで空白に到達したら、
その到達した位置のポインタが引数で拾える
数値も拾える
2行目以降の文字列は省略
池沼でも拾える
ここまで書けばどんなドカタでも作業はできるハズだ
773デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/08(日) 23:16:50.92ID:w/p0hjmq0 テキストのパースなんてそれこそperlやpythonにやらせろよ
そんなところが速度にクリティカルに効いててゴリゴリ高速化しなきゃいけないのは作りがおかしい
そんなところが速度にクリティカルに効いててゴリゴリ高速化しなきゃいけないのは作りがおかしい
774デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/08(日) 23:30:01.88ID:yMyBSsTod775デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/08(日) 23:41:27.36ID:yMyBSsTod >>767
読み込み以外、ライブラリなんか使わずに全て自分のコードにしてみようか
そうすれば色々とわかるはず
読み込みは16MBずつとかにすれば速い
出力先はファイル?メモリ上?
数値は32bit floatで保存するとして
文字列は?
そのままの形で使う?
読み飛ばす?
読み込み以外、ライブラリなんか使わずに全て自分のコードにしてみようか
そうすれば色々とわかるはず
読み込みは16MBずつとかにすれば速い
出力先はファイル?メモリ上?
数値は32bit floatで保存するとして
文字列は?
そのままの形で使う?
読み飛ばす?
776デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/08(日) 23:43:29.21ID:q7fGM+tb0777デフォルトの名無しさん (ワッチョイ a7d2-UVFs)
2018/07/08(日) 23:47:06.61ID:ib3y3idC0 SQLite はメモリ上にDBを構築できるので試してみるのもいいでしょう。
起動時のテーブルの初期化が大変だけど、あとはサクサク。
起動時のテーブルの初期化が大変だけど、あとはサクサク。
778デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:54:44.54ID:IBdHDRbb0 な、知恵遅れたちはテキトーなことばっかりいってる
こんなゴミみたいなコードで速攻でかけるのに
こんなゴミみたいなコードで速攻でかけるのに
779デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:55:41.66ID:IBdHDRbb0 ゴミはめちゃくちゃしょうもない簡単なコードを
いちいち複雑にする
そしてもだれもメンテナンスできなくなる
いちいち複雑にする
そしてもだれもメンテナンスできなくなる
780デフォルトの名無しさん (ワッチョイ 67bd-aMDz)
2018/07/08(日) 23:56:30.09ID:Jzinsuog0 自分への間違い指摘は全部無視するのが半角スタイル
781デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:57:09.03ID:IBdHDRbb0 オレはなにも間違ったこと書いてない
782デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/08(日) 23:57:21.06ID:yMyBSsTod 数値の行は以下みたいなドロくさい処理を4回繰り返せば良い
unsigned int n = 0;
do {
unsigned char ch = (unsigned char)(*data++ - '0');
if (ch <= 9)
{
n = n * 10 + ch;
}
else {
break;
}
} while (true);
unsigned int n = 0;
do {
unsigned char ch = (unsigned char)(*data++ - '0');
if (ch <= 9)
{
n = n * 10 + ch;
}
else {
break;
}
} while (true);
783デフォルトの名無しさん (ワッチョイ 7f81-Gfd3)
2018/07/08(日) 23:57:59.70ID:fRwyFHTq0 サーバーなんだから、普通にDB使えるだろう
784デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:59:14.83ID:IBdHDRbb0 だいたい分かるわ
やっぱりなPGなんか低学歴しかやらない
やっぱりなPGなんか低学歴しかやらない
785デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:00:03.01ID:EkQ+mvr8d 単に統計情報が知りたいだけならわざわざ重くしてから処理をする必要もないし
DBに入れるにしても解析しないとダメだろ
DBに入れるにしても解析しないとダメだろ
786デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:03:17.82ID:c1VUAguL0 たとえば1行目なんかこんなしょうもないのでとれる
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type_t, unsigned char const** pct_next) {
unsigned char const* c_buf = buf;
for (; !isspace(*c_buf); ++c_buf) ;
if (!::strncmp((char const*)buf, TYPE_STRING, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_STRING;
} else if (!::strncmp((char const*)buf, TYPE_INT_TO_FLOAT, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_INT_TO_FLOAT;
} else {
fprintf(stderr, "氏ねヴォケ\n");
return -1;
}
pt_baka_type_t->u_records = strtoul((char const*)c_buf, (char**)&c_buf, 10);
++c_buf;
*pct_next = c_buf;
return 0;
}
はっきりいってな、2行目以降の数値も文字列もやりかたなんか同じだからな
ドカタ作業
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type_t, unsigned char const** pct_next) {
unsigned char const* c_buf = buf;
for (; !isspace(*c_buf); ++c_buf) ;
if (!::strncmp((char const*)buf, TYPE_STRING, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_STRING;
} else if (!::strncmp((char const*)buf, TYPE_INT_TO_FLOAT, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_INT_TO_FLOAT;
} else {
fprintf(stderr, "氏ねヴォケ\n");
return -1;
}
pt_baka_type_t->u_records = strtoul((char const*)c_buf, (char**)&c_buf, 10);
++c_buf;
*pct_next = c_buf;
return 0;
}
はっきりいってな、2行目以降の数値も文字列もやりかたなんか同じだからな
ドカタ作業
787デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:08:20.49ID:c1VUAguL0 ゴミは口だけは達者
しかもアリエナイ頭ワルイことばっかりいうからな
しかもアリエナイ頭ワルイことばっかりいうからな
788デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:08:49.29ID:EkQ+mvr8d わざわざ標準ライブラリを使うために小細工しなくても良いんじゃないの?
何がどういう順番で書いてあるかはわかってるようだし無駄に重くしなくても
何がどういう順番で書いてあるかはわかってるようだし無駄に重くしなくても
789デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:10:37.45ID:c1VUAguL0 きっとなオマエが書いたゴミコードより標準ライブラリのほうが
バグもないし早いと思うわ
バグもないし早いと思うわ
790デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/09(月) 00:11:39.32ID:UZv1uWMQ0 いかにもバッファはみ出してそうなきったねえコードですね
いまどきポインタで文字列処理すんじゃねえよ老害
いまどきポインタで文字列処理すんじゃねえよ老害
791デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:12:54.25ID:c1VUAguL0 な、知恵遅れはこんなとこで書いたサンプルに
エラー処理が入ってると思ってる
もうねコレだから低学歴は困るわけ
エラー処理が入ってると思ってる
もうねコレだから低学歴は困るわけ
792デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:13:53.01ID:c1VUAguL0 日本のPGは低学歴しかいないのが
このスレで何度も証明されてる
このスレで何度も証明されてる
793デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:17:45.37ID:EkQ+mvr8d 学歴コンプか?
794デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:19:33.01ID:c1VUAguL0 低学歴に反応してるということは
図星なんだろ
もう分かってるからな
悪いけどなレスみれば低学歴なのは
残念ながらすぐに分かってしまう
低学歴特有のレスというのがある
隠そうとしてもムダ
図星なんだろ
もう分かってるからな
悪いけどなレスみれば低学歴なのは
残念ながらすぐに分かってしまう
低学歴特有のレスというのがある
隠そうとしてもムダ
795デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/09(月) 00:21:50.74ID:UZv1uWMQ0 ポインタいじくり回してメモリ境界踏み壊すコードを書くのが大好きなすうぱあぷろぐらまあ様は
無駄な高学歴の方が多いという個人的な印象
無駄な高学歴の方が多いという個人的な印象
796デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:23:07.75ID:c1VUAguL0 あのレベルでポインタいじくりまわしてる?
どんだけオツムが弱いねん・・・
どんだけオツムが弱いねん・・・
797デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:26:52.35ID:c1VUAguL0 ようするにポインタが理解できてない
こんなのがプログラマさまきどってるのが日本だからな
そらなこんなのがコードいじくってたら
障害ばっかりおきるハズだわ
こんなのがプログラマさまきどってるのが日本だからな
そらなこんなのがコードいじくってたら
障害ばっかりおきるハズだわ
798デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/09(月) 00:28:24.71ID:Z1S7bos70 未だにこんな化石みたいなヤツが居たことに驚きなんだが
799デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:29:58.95ID:1qBtnID4d >>786みたいに、何度も何度もスキャンするような無駄の多いコードが速いわけないだろ
800デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:30:58.58ID:c1VUAguL0 低学歴は自分を大きく見せようとするからな
5f34-M0Jq ← コイツなんか典型的といっていい
わかってしまう
きっとコイツは専門卒
残念なことにレスみればすぐに分かる
だてにいままでいろんなゴミを相手にしてきたワケではない
5f34-M0Jq ← コイツなんか典型的といっていい
わかってしまう
きっとコイツは専門卒
残念なことにレスみればすぐに分かる
だてにいままでいろんなゴミを相手にしてきたワケではない
801デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:32:10.58ID:c1VUAguL0 何度もスキャン?
一回しかスキャンしてないぞ
まずコードがよめてない
ポインタは後ろにしか進んでないのに
一回しかスキャンしてないぞ
まずコードがよめてない
ポインタは後ろにしか進んでないのに
802デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/09(月) 00:34:20.75ID:UZv1uWMQ0 strncmpが中で何やってるか知らないんだねかわいそうに
803デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:34:44.55ID:c1VUAguL0 あ
もしかして
必要な1回の文字列判定を何度もスキャンとかいってるの?
もしかして
必要な1回の文字列判定を何度もスキャンとかいってるの?
804デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:36:07.46ID:c1VUAguL0 低学歴によると
通常の字句解析と構文解析を一緒にするのか
なるほどな
通常の字句解析と構文解析を一緒にするのか
なるほどな
805754 (アウアウウー Sa0b-sule)
2018/07/09(月) 00:37:52.14ID:oMFJCZ8na たくさんの情報大変参考になります。
サンプルコードもありがたいです。
実際に動かしながらどう動いているのか調べてみます。
>>775
読み込みを16MB単位でやってみます。
ファイルに出力することはなくて、読み込んだ情報をGUIでクリックして、
こっちをクリックするとこんな結果になっている、こっちだとこの結果、
というようなビューアを作ろうとしています。
文字列も重要な情報なので、
struct info{
サンプルコードもありがたいです。
実際に動かしながらどう動いているのか調べてみます。
>>775
読み込みを16MB単位でやってみます。
ファイルに出力することはなくて、読み込んだ情報をGUIでクリックして、
こっちをクリックするとこんな結果になっている、こっちだとこの結果、
というようなビューアを作ろうとしています。
文字列も重要な情報なので、
struct info{
806デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:41:56.28ID:AazuLIX60 それならそもそもファイル全体を解析しておく必要もないのでは?
807デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:43:27.81ID:c1VUAguL0 よしオマエはいい子のようだから
STRINGの部分をとるコードもあげよう
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_b;
unsigned char const* c_buf_e = buf;
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
c_buf_b = c_buf_e;
for (; *c_buf_e != '\x0a'; ++c_buf_e) ;
// c_buf_b から始まる c_buf_e - c_buf_b の長さが取得する文字列
fprintf(stdout, TYPE_STRING":%.*s\n", c_buf_e - c_buf_b, c_buf_b); // ← ココでとれる
++c_buf_e;
}
return 0;
}
STRINGの部分をとるコードもあげよう
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_b;
unsigned char const* c_buf_e = buf;
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
c_buf_b = c_buf_e;
for (; *c_buf_e != '\x0a'; ++c_buf_e) ;
// c_buf_b から始まる c_buf_e - c_buf_b の長さが取得する文字列
fprintf(stdout, TYPE_STRING":%.*s\n", c_buf_e - c_buf_b, c_buf_b); // ← ココでとれる
++c_buf_e;
}
return 0;
}
808デフォルトの名無しさん (ワッチョイ 5f2b-ExT7)
2018/07/09(月) 00:49:09.36ID:4jZgSN4s0 >>786
入力が不正の場合にメモリフォルト起こすコードは絶対受け付けられない
入力が不正の場合にメモリフォルト起こすコードは絶対受け付けられない
809デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:49:43.29ID:AazuLIX60 だね
810デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:50:43.58ID:c1VUAguL0 バリデーションチェックは自分で入れるにきまってるだろ
アホちゃうかコイツラ
アホちゃうかコイツラ
811デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:51:20.09ID:c1VUAguL0 そういうレスしかできないからな
程度が知れるわけ
低学歴らしい
程度が知れるわけ
低学歴らしい
812デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:51:52.89ID:AazuLIX60 言い訳が見苦しい
813デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:53:03.02ID:c1VUAguL0 いいわけ?
マジでいってるわけ?
ホントな頭悪い
マジでいってるわけ?
ホントな頭悪い
814デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:53:36.22ID:c1VUAguL0 典型的な低学歴のレスといっていい
815デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:55:36.81ID:AazuLIX60 コードでも学歴でも何でも良いけど
勝負するなら受けるよ
勝負するなら受けるよ
816デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:56:18.28ID:c1VUAguL0 ハナクソがオレとなんの勝負すんの
817デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:58:04.11ID:AazuLIX60 日本語も読めないのか
818デフォルトの名無しさん (ワッチョイ a781-5SLP)
2018/07/09(月) 00:58:34.17ID:VjVxTpnI0 職場もこんな雰囲気?
819デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:59:12.63ID:c1VUAguL0 ハナクソは
学歴も書いてないし
コードも書いてない
で?
学歴も書いてないし
コードも書いてない
で?
820デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:01:13.46ID:c1VUAguL0 低学歴知恵遅れは
コミュニケーション能力もゼロに近い
そもそも唐突に
なにがしたいのか
なにがいいたいのか
意味が分からないワケ
コミュニケーション能力もゼロに近い
そもそも唐突に
なにがしたいのか
なにがいいたいのか
意味が分からないワケ
821デフォルトの名無しさん (ワッチョイ 5f2b-ExT7)
2018/07/09(月) 01:02:30.85ID:4jZgSN4s0 いまどき自前の字句解析処理をCでポインタ使って書くなんて
バッファ境界のチェックとか面倒だし絶対ミスるからやめた方が良いって話なのに
いきなりエラー処理完全無視したコード出されてドン引きです
バッファ境界のチェックとか面倒だし絶対ミスるからやめた方が良いって話なのに
いきなりエラー処理完全無視したコード出されてドン引きです
822デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:03:34.22ID:c1VUAguL0 どんびきするとかしないとかは
オマエの勝手だからな
オマエの勝手だからな
823デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 01:04:20.90ID:AazuLIX60 >>821
ポインタも扱えないようなレベルならC++は使わない方が良い
ポインタも扱えないようなレベルならC++は使わない方が良い
824デフォルトの名無しさん (ブーイモ MM7f-CyKI)
2018/07/09(月) 01:04:49.68ID:ZGamhF5dM あんまりゴミだから自信満々なc1VUAguL0がコード貼ってるのに気が付かなかったな、ログ読み直しちゃったよ
学歴は書いてないみたいだけど
学歴は書いてないみたいだけど
825デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 01:05:34.06ID:AazuLIX60■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 今後50年間、毎年100万人ずつ人口が減る…「少子化対策」の失敗で日本が迎える「死ぬまで搾取」というヤバい未来 ★5 [ぐれ★]
- 橋下徹氏 高市首相“台湾有事”発言に「政治家の失言で一部の人でも仕事がキャンセルに…我々は認めていいのかな」疑問呈す [muffin★]
- 中国外相、台湾問題巡りフランスに支持要請−高市首相発言「挑発的」 [♪♪♪★]
- 「怒りに震えて涙が出た」 同性婚認めず「合憲」判断に原告が反発 「差別的な判決だ」 [ぐれ★]
- 《「最近いつした?」が口癖》国分太一 女性への“わいせつ事案”報道…目撃されていた「下ネタ好き」と「悪辣なイジり癖」 [Ailuropoda melanoleuca★]
- 高市首相が代表の政党支部、企業から上限超える寄付 公表後に訂正 [どどん★]
- 【動画】上海バンダイナムコフェス、ワンピース歌ってる途中に中国政府「日本人の公演全面禁止」発令された瞬間強制終了 怖すぎ★3 [579392623]
- 【悲報】高市早苗さん、就任たった1ヶ月で国が滅茶苦茶になる [115996789]
- 中国ネット民、高市早苗のことを「車力巨人」と呼んでいた… 自動翻訳してみんな巨人巨人言ってるから何のことかと思ったわ [452836546]
- マージャンのルールがよく分からんけどポンってやつをやれば勝てるんだろ
- ぽみぃくんってもういないの?
- お前らは悪い子だからお仕置が必要だ
