C++相談室 part136

■ このスレッドは過去ログ倉庫に格納されています
2018/06/07(木) 23:40:12.36ID:GNQuDMaA0
次スレを立てる時は本文の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
2018/07/07(土) 17:26:09.82ID:vaOvOKvn0
パフォーマンスを気にするときは
乗算すら除きたいわけで
2018/07/07(土) 17:33:51.53ID:4FQUFFqD0
>>725
ちょっ乗算なら>>702案にもwidth * y + xみたいなアクセスという形で含まれる件について:
widthを定数だとコンパイラが認識した場合は、単純な>>702案の方が最適化が効いてシフト演算なりになる可能性が高いが
2018/07/07(土) 17:59:13.38ID:LxSGsocZ0
>>724
まあ、かなり無理矢理感があるのは事実
俺には他にいい方法も思いつかないけど

>>726
メモリーアクセスに対して乗算が問題になるケースってかなり減ってると思うけどな
2018/07/07(土) 18:05:35.89ID:xCeElJD00
>>728
そうか?画像を90度回してみてくれ
2018/07/07(土) 18:06:41.64ID:n3/QBjsU0
スペック上げて殴れ
2018/07/07(土) 18:11:02.14ID:7Amz+9JA0
殴らなくてもモニターを横にすればいいだけじゃ
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に対する副作用がわからない関数呼び出しは含まれないから、原理的に最適化不可能というほどではない。
2018/07/07(土) 19:01:02.34ID:4FQUFFqD0
ていうかこれで良くね?
ttp://codepad.org/2sMvNgye
2018/07/07(土) 19:21:35.06ID:LxSGsocZ0
>>729
何を言いたいのかさっぱり

>>733
だからそれでいいかどうかは>>689も書いてる通り要件による
メモリーが連続でないとヤダっていう要件があるかも知れんし
2018/07/07(土) 19:26:22.85ID:4FQUFFqD0
ていうか>>706にすでに書いてあったorz
ただ行や列の追加をしたいという場合は>>706では済まなくて、相応のコピコンを備えた独自クラスでのwrapが多分必要
(データを引き継ぎつつ、異なる行数や列数のオブジェクトを新たに作るコピコンを設ける
736デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/07(土) 19:35:42.78ID:kLxolQc60
やっぱりな知恵遅れのバカどもはなにも分かってないわ。。。

演算処理で一番ボトルネックになるのはメモリアクセスだからな
高速な演算をしたいのにメモリをあちこちバラバラに配置する知恵遅れはいない

局所参照性を無視して乗算がどうこうといってるレベルだからな。。。
知恵遅れたちには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
↑同じアホでもまだこっちのがマシ

あいかわらずオレのレスは
いつでも針の穴を通すようなカンペキなレスだ
2018/07/07(土) 19:57:56.70ID:O2wU114Q0
つ valarray
2018/07/07(土) 19:58:36.71ID:4FQUFFqD0
>>736
行列のrowを個別のstd::vector<T>とすることによる局所参照性の劣化は
ラスタスキャン順アクセスにおいて第i行から第i+1行に改行する時のみに限られる
(特にたまたま行列の横幅がキャッシュラインサイズの倍数でありかつ行がキャッシュラインに整列しているならば、何のペナルティーも生じない
ランダムアクセスならどっちもどっちになるからでかい配列の場合は言うほど気にしなくて良いんじゃ…
2018/07/07(土) 20:41:37.82ID:vaOvOKvn0
パフォーマンス優先なら

メモリは連続
要素へのアクセスはシンプルに

[][] にこだわる必要はない
(x, y) や [座標] なども考える

乗算が遅い環境なら
要素数は2^nの形にするとか位置をキャッシュするとか
固定座標の処理で良いものはコンパイル時に決定出来るようにとか
2018/07/07(土) 20:49:15.42ID:vaOvOKvn0
コンパイラをあてにするなら
生ポが一番最適化が効く
このスレだと拒否反応を示す人がいるだろうマクロを使うとか
2018/07/07(土) 21:35:08.81ID:2pqJGsxY0
MTPでコンパイルタイムに押し込めー わぁい!

と、5,6年前にやったときは8x9行列ぐらいで
gccのテンプレート展開の限界になった記憶がある
2018/07/07(土) 23:53:17.73ID:HbEbhDY0a
LINUXで15GBくらいのテキストファイルを読み込みこんでGUIを作ろうとしています。
ファイルが大きいため速度が出せる言語で、かつGUI作成は情報量が多いと調べやすいので、まあまあメジャーな無料のGUIライブラリを使用したいと思っています。

perl>>python>>>>C++ の順で経験があり、C++はあまり詳しくないですが、速度重視でC++で行こうと検討しています。
GUIライブラリを調べているのですが、C++のGUIはあまり情報を見つけられず、めぼしいのはQtくらいしか目に付きませんでした。
会社のサーバのローカルディレクトリにQtをインストールしてみましたが、必要なライブラリが古かったりで、インストールできませんでした。

他に何かおすすめなGUIライブラリはありますでしょうか?
2018/07/07(土) 23:56:16.40ID:n3/QBjsU0
公開しないならQtしかないしいつまでも古いライブラリを入れておくな
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++プログラムとプロセス間通信と行うのがいいんじゃないですかね。
2018/07/08(日) 00:40:55.76ID:Jzinsuog0
15gbのデータはguiでeditするの?
それともread onlyな入力データ?
2018/07/08(日) 01:20:06.11ID:ctFpH6QP0
個人的にはwxWidgetsを推す
2018/07/08(日) 01:24:30.59ID:zc7zM8II0
どんなテキスト?
完全な自由フォーマット?
2018/07/08(日) 01:37:33.05ID:zc7zM8II0
15GBだと読み込みだけで分単位の時間がかかる

UIも難しい
巨大テキストからどうやって表示箇所を選ぶ?
スクロールバーとページめくりだけじゃ目的の箇所を探せないよ
行番号指定ジャンプ?

15GBだとメモリコピーでも秒オーダーの時間がかかるから
1文字入力するごとに後ろをずらすなんてことも出来ないから
データの持ち方も工夫しないと
そもそもメモリに収まりきるのか?
RAMは何ギガ?
2018/07/08(日) 01:58:53.01ID:fRwyFHTq0
サーバーって事だから、いっそ使いやすい型式でDBに格納し、
Web画面で表示するっていうのはどうだろう
グラフィック表示はクライアント側に任せてしまう
2018/07/08(日) 02:43:06.14ID:Qh5q4wMA0
全部で15GBのテキストじゃないの?
流石に1個で15GBは… 円周率のテキストファイルとかならあり得るか
2018/07/08(日) 05:15:51.48ID:qIOhFZFQ0
mmapかねえ
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で保存しそれを参照ですが、それに近い感じで使いやすい形式に変換したものをメモリに格納し参照するイメージです。
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++;
}
2018/07/08(日) 10:52:07.74ID:FCqbYUBUa
あとは下記URLの「ファイルは一括で読み込め」の読み込み速度はどうかも調べてみる予定です。

ttps://qiita.com/kotauchisunsun/items/84e01c6fb621fcc1a647

それと下記も高速化のコーディングの参考にしようかと。

ttps://heavywatal.github.io/cxx/speed.html
2018/07/08(日) 11:00:23.53ID:zc7zM8II0
読み込みと解析は別スレッド
解析はマルチスレッド
関数は専用化
AVXなどのリッチな命令を活用する
キャッシュを効率的に使う(何度も全体スキャンしない)

一般的な効率化技術
2018/07/08(日) 11:22:12.48ID:zc7zM8II0
fgetc, scanf, printfのような激遅関数は使わない
ファイルは大きな単位で読み込む (MB以上)
2018/07/08(日) 11:37:23.14ID:zc7zM8II0
>>758をまずやって
>>757はそのあと考える
2018/07/08(日) 11:52:14.55ID:7cBfk+Rf0
ssd使え
2018/07/08(日) 11:55:19.27ID:zc7zM8II0
15GB 30秒ってことは
HDDから読んでるわけではなさそう
キャッシュかSSD
2018/07/08(日) 14:39:20.17ID:xrorYcun0
まずは激遅でもいいからperlのGUIとDLL呼び出しで一通り動くものを作った方が良さそう
2018/07/08(日) 17:08:24.55ID:3Zh5d1Fm0
メモリ数百あるんなら、展開した後のデータ構造工夫しろ。
数ギガ読めるテキストエディタを夢想してみれ。
2018/07/08(日) 18:27:44.90ID:qIOhFZFQ0
数ギガを一気読みでオンメモリとか蹴り入るな
2018/07/08(日) 19:48:36.43ID:h0tkW0Td0
コンバート系アプリだと専用端末だったりするしよくある
766デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/08(日) 22:07:57.31ID:IBdHDRbb0
まず固定長なら1行のバッファから読みこむだけの仕組みを作ってからの話になる
はっきりいって固定長のレイアウトに従って読みこむだけだからな

読みこみ処理の最適化なんかその後の話になる

固定長でなにをそんなに手こずってるのか意味が分からないしな
レコードのサイズはきまってるのに

fscanfとか書いてるということは末尾に改行が入ったレイアウトなのはなんとなく推定できる

レスを読んでもそもそも1レコードのサイズが何バイトなのか分かってて作ってるのかどうかすら怪しい
ファイルサイズをレコードサイズで割ってちゃんと整数になってるかとか確認してるのかどうかすらも怪しいからな
ファイルサイズだけ書いてレコード数すら書いてないしな

とにかく頭悪いヤツがしょうもないことで四苦八苦してるのは分かる
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行
768デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/08(日) 22:15:17.90ID:IBdHDRbb0
知恵遅れはそれを固定長とかいってんのか
なるほどな

まず知恵遅れとは語彙の一致が成立してない
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行
2018/07/08(日) 22:17:59.21ID:q7fGM+tb0
少しは自分で考えろよこのバカ
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行目以降の文字列は省略 
池沼でも拾える

ここまで書けばどんなドカタでも作業はできるハズだ
2018/07/08(日) 23:16:50.92ID:w/p0hjmq0
テキストのパースなんてそれこそperlやpythonにやらせろよ
そんなところが速度にクリティカルに効いててゴリゴリ高速化しなきゃいけないのは作りがおかしい
2018/07/08(日) 23:30:01.88ID:yMyBSsTod
>>768
質問者が固定長なんて書いてた?
固定長と言い出したのはあなたでしょ?
2018/07/08(日) 23:41:27.36ID:yMyBSsTod
>>767
読み込み以外、ライブラリなんか使わずに全て自分のコードにしてみようか
そうすれば色々とわかるはず
読み込みは16MBずつとかにすれば速い

出力先はファイル?メモリ上?
数値は32bit floatで保存するとして
文字列は?
そのままの形で使う?
読み飛ばす?
2018/07/08(日) 23:43:29.21ID:q7fGM+tb0
>>772
お前何年前のゴミSEだよ
古代文字解析みたいな手法揚げやがって
lexical analyzer 系統使うだろ
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
ゴミはめちゃくちゃしょうもない簡単なコードを
いちいち複雑にする

そしてもだれもメンテナンスできなくなる
2018/07/08(日) 23:56:30.09ID:Jzinsuog0
自分への間違い指摘は全部無視するのが半角スタイル
781デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/08(日) 23:57:09.03ID:IBdHDRbb0
オレはなにも間違ったこと書いてない
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);
2018/07/08(日) 23:57:59.70ID:fRwyFHTq0
サーバーなんだから、普通にDB使えるだろう
784デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/08(日) 23:59:14.83ID:IBdHDRbb0
だいたい分かるわ
やっぱりなPGなんか低学歴しかやらない
2018/07/09(月) 00:00:03.01ID:EkQ+mvr8d
単に統計情報が知りたいだけならわざわざ重くしてから処理をする必要もないし
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行目以降の数値も文字列もやりかたなんか同じだからな
ドカタ作業
787デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:08:20.49ID:c1VUAguL0
ゴミは口だけは達者
しかもアリエナイ頭ワルイことばっかりいうからな
2018/07/09(月) 00:08:49.29ID:EkQ+mvr8d
わざわざ標準ライブラリを使うために小細工しなくても良いんじゃないの?
何がどういう順番で書いてあるかはわかってるようだし無駄に重くしなくても
789デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:10:37.45ID:c1VUAguL0
きっとなオマエが書いたゴミコードより標準ライブラリのほうが
バグもないし早いと思うわ
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は低学歴しかいないのが
このスレで何度も証明されてる
2018/07/09(月) 00:17:45.37ID:EkQ+mvr8d
学歴コンプか?
794デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:19:33.01ID:c1VUAguL0
低学歴に反応してるということは
図星なんだろ

もう分かってるからな

悪いけどなレスみれば低学歴なのは
残念ながらすぐに分かってしまう
低学歴特有のレスというのがある

隠そうとしてもムダ
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
ようするにポインタが理解できてない
こんなのがプログラマさまきどってるのが日本だからな

そらなこんなのがコードいじくってたら
障害ばっかりおきるハズだわ
2018/07/09(月) 00:28:24.71ID:Z1S7bos70
未だにこんな化石みたいなヤツが居たことに驚きなんだが
2018/07/09(月) 00:29:58.95ID:1qBtnID4d
>>786みたいに、何度も何度もスキャンするような無駄の多いコードが速いわけないだろ
800デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:30:58.58ID:c1VUAguL0
低学歴は自分を大きく見せようとするからな
5f34-M0Jq ← コイツなんか典型的といっていい

わかってしまう
きっとコイツは専門卒
残念なことにレスみればすぐに分かる

だてにいままでいろんなゴミを相手にしてきたワケではない
801デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:32:10.58ID:c1VUAguL0
何度もスキャン?
一回しかスキャンしてないぞ

まずコードがよめてない
ポインタは後ろにしか進んでないのに
2018/07/09(月) 00:34:20.75ID:UZv1uWMQ0
strncmpが中で何やってるか知らないんだねかわいそうに
803デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:34:44.55ID:c1VUAguL0

もしかして
必要な1回の文字列判定を何度もスキャンとかいってるの?
804デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:36:07.46ID:c1VUAguL0
低学歴によると
通常の字句解析と構文解析を一緒にするのか
なるほどな
2018/07/09(月) 00:37:52.14ID:oMFJCZ8na
たくさんの情報大変参考になります。
サンプルコードもありがたいです。
実際に動かしながらどう動いているのか調べてみます。

>>775
読み込みを16MB単位でやってみます。
ファイルに出力することはなくて、読み込んだ情報をGUIでクリックして、
こっちをクリックするとこんな結果になっている、こっちだとこの結果、
というようなビューアを作ろうとしています。
文字列も重要な情報なので、
struct info{
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;
}
2018/07/09(月) 00:49:09.36ID:4jZgSN4s0
>>786
入力が不正の場合にメモリフォルト起こすコードは絶対受け付けられない
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
そういうレスしかできないからな
程度が知れるわけ

低学歴らしい
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
典型的な低学歴のレスといっていい
2018/07/09(月) 00:55:36.81ID:AazuLIX60
コードでも学歴でも何でも良いけど
勝負するなら受けるよ
816デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
垢版 |
2018/07/09(月) 00:56:18.28ID:c1VUAguL0
ハナクソがオレとなんの勝負すんの
2018/07/09(月) 00:58:04.11ID:AazuLIX60
日本語も読めないのか
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
どんびきするとかしないとかは
オマエの勝手だからな
2018/07/09(月) 01:04:20.90ID:AazuLIX60
>>821
ポインタも扱えないようなレベルならC++は使わない方が良い
2018/07/09(月) 01:04:49.68ID:ZGamhF5dM
あんまりゴミだから自信満々なc1VUAguL0がコード貼ってるのに気が付かなかったな、ログ読み直しちゃったよ
学歴は書いてないみたいだけど
2018/07/09(月) 01:05:34.06ID:AazuLIX60
>>820
勝負する気があるの?
ないの?
あるなら方法を決めるけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況