文字列連結パフォーマンス

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cユーザー

文字列連結パフォーマンス

#1

投稿記事 by Cユーザー » 13年前

文字列と数字を連結させる最速の処理を探しています。
現在検証したのは

・sprintf
・_itoa_s + strcat

他にこれ以上早く処理ができる方法ないでしょうか

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列連結パフォーマンス

#2

投稿記事 by softya(ソフト屋) » 13年前

Cユーザー さんが書きました:文字列と数字を連結させる最速の処理を探しています。
現在検証したのは

・sprintf
・_itoa_s + strcat

他にこれ以上早く処理ができる方法ないでしょうか
何のために必要な処理でしょうか? 普通は考える必要のない処理だと思います。
ただ、汎用関数に頼らないほうが速いのは確かです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: 文字列連結パフォーマンス

#3

投稿記事 by へにっくす » 13年前

何がしたいんでしょうね?
マイコン8bitの世界ならともかく、
いまどきのパソコンで文字列連結に対するパフォーマンスをみる必要があるのかな?

それに実際にコード組んで、何秒かかったか調べたのかいな?
(まあ秒なんてかからないと思うけど)
もし1秒以上かかるのであれば、そのコード、実行したPCのスペックなどを掲示するのが筋です。
その上で、これ以上早くなる処理がないか聞くべきです。
written by へにっくす

Cユーザー

Re: 文字列連結パフォーマンス

#4

投稿記事 by Cユーザー » 13年前

いやそりゃ確かに1秒はかからないですけど
何万回も繰り返せば差がでます

何の為にとか奇妙な質問されますが
パフォーマンス向上の為としかいいようがありません。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 文字列連結パフォーマンス

#5

投稿記事 by h2so5 » 13年前

Cユーザー さんが書きました:何の為にとか奇妙な質問されますが
パフォーマンス向上の為としかいいようがありません。
現在の実装では仕様上要求される時間内に処理を完了できないなど、パフォーマンスに関係する問題が存在しているのでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列連結パフォーマンス

#6

投稿記事 by softya(ソフト屋) » 13年前

Cユーザー さんが書きました:いやそりゃ確かに1秒はかからないですけど
何万回も繰り返せば差がでます

何の為にとか奇妙な質問されますが
パフォーマンス向上の為としかいいようがありません。
なぜ、こんなことを聞くかと言うと、必要もない所でパフォーマンスにこだわりイレギュラーなコードを書くプログラマーは、悪いプログラマーに分類されるからです。
【補足】 正確には質の悪いコードを書くプログラマーですかね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Cユーザー

Re: 文字列連結パフォーマンス

#7

投稿記事 by Cユーザー » 13年前

言いたいことはわからないでもないですが
私をしては処理の高速化は必要だから質問しており
それが必要かどうかってのは私の立場ではないとわからないことでは?

どう答えていいのかがわからない

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列連結パフォーマンス

#8

投稿記事 by softya(ソフト屋) » 13年前

Cユーザー さんが書きました:言いたいことはわからないでもないですが
私をしては処理の高速化は必要だから質問しており
それが必要かどうかってのは私の立場ではないとわからないことでは?

どう答えていいのかがわからない
どうしてもと言うなら
1.高速化するなら、とりあえず、汎用関数は使いません。
2.数値の文字列変換は自分で書きます。
3.2の時の最後のポインタ位置を覚えておいて、そのポインタ位置に文字列をコピーします。これも自分で書きます。strcpyでも同じアセンブラコードが出るならそちらを使います。
4.2と3はアセンブラコードの出力を見ながらコードをチューニングします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Cユーザー

Re: 文字列連結パフォーマンス

#9

投稿記事 by Cユーザー » 13年前

h2so5さん

>現在の実装では仕様上要求される時間内に処理を完了できないなど、パフォーマンスに関係する問題が存在しているのでしょうか

いやそういうわけではないんですが
処理の高速化を求めています。

たいちう
記事: 418
登録日時: 15年前

Re: 文字列連結パフォーマンス

#10

投稿記事 by たいちう » 13年前

> 何の為にとか奇妙な質問されますが
> パフォーマンス向上の為としかいいようがありません。

回答者が聞き返している質問を、奇妙と思っているのですよね?
今時のPCならば何万回繰り返したところで、体感できる差は出ません。
パフォーマンスが悪いならばプログラムの他の部分が理由である可能性が高いです。

例えば、文字列を結合する処理よりも、文字列を表示する処理の方が桁違いに遅いですよ。

文字列結合が本当に必要だとしたら答えは出てますよね。
softyaさんの書いているとおり、専用の処理を作ればよいのです。

(何故か投稿に失敗したので再投稿。重複してたら削除お願いします)

Cユーザー

Re: 文字列連結パフォーマンス

#11

投稿記事 by Cユーザー » 13年前

専用の処理ですね
なるほど検討しています。


To たいちうさん

ちょっと認識が合ってないと思います。例えば、現場リーダーからここの処理遅いから早くできないか、最速にしてほしいと言われたときに
体感では変わらないからとは言えません。数字を提示してこれが最速だからこれでいきます、と言う必要があります。
今回のもちょっと違いますけど似たような境遇です。なので、ここの処理をできるだけ早くする必要があります。

最初からこういえば理解してもらえたかな

Cユーザー

Re: 文字列連結パフォーマンス

#12

投稿記事 by Cユーザー » 13年前

すいません、一旦解決にさせていただきます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列連結パフォーマンス

#13

投稿記事 by softya(ソフト屋) » 13年前

Cユーザー さんが書きました:専用の処理ですね
なるほど検討しています。


To たいちうさん

ちょっと認識が合ってないと思います。例えば、現場リーダーからここの処理遅いから早くできないか、最速にしてほしいと言われたときに
体感では変わらないからとは言えません。数字を提示してこれが最速だからこれでいきます、と言う必要があります。
今回のもちょっと違いますけど似たような境遇です。なので、ここの処理をできるだけ早くする必要があります。

最初からこういえば理解してもらえたかな
たいちうさんが書いたようにファイル出力などが一番遅いので、出力処理を非同期にしてその時に文字列を結合すれば結合の処理時間は相殺される可能性が高いです。
なので、最適解は処理途中は結合しないで使うのが一番早いかもしれません。そこだけ見た時と全体を見た時の答えは違う可能性があるので単純な高速化は意味が無いかもしれませんよね。そこまで考えているんでしょうか?と言う皆さんの問いかけなのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Cユーザー

Re: 文字列連結パフォーマンス

#14

投稿記事 by Cユーザー » 13年前

なるほど、ありがとうございます。
その件も含めて再検討します

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列連結パフォーマンス

#15

投稿記事 by softya(ソフト屋) » 13年前

仕事上で、どうしても止む負えない場合以外で、私の回答の様なアセンブラコードレベルでチューニングしたコードを書いてきたら、メンテンナンス性が悪いからとやり直しを命じるでしょう。
まず、見直すべきのは全体の仕様レベル、アルゴリズムレベルでの無駄がないかです。
文字列の結合など行わずに済むなら文字列の結合は時間の無駄以外の何物でもないので、文字列の処理を極力無くす方向に転換すべきでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Ryo

Re: 文字列連結パフォーマンス

#16

投稿記事 by Ryo » 13年前

本当にこのレベルでの高速化を検討する気あるなら
実行環境などの情報が必要ではないでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列連結パフォーマンス

#17

投稿記事 by softya(ソフト屋) » 13年前

Ryo さんが書きました:本当にこのレベルでの高速化を検討する気あるなら
実行環境などの情報が必要ではないでしょうか?
_itoa_sが出てくる時点でほぼ間違いなくVisualStudioの環境と思われますが、Windowsで文字列結合にそこまでチューニングをする必然性が分からないんですよね。
時間が掛るのが嫌ならスレッドに分離すれば良いじゃないかとか、全体を見れば手はいくらでもありそうだと思うんですよね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Ryo

Re: 文字列連結パフォーマンス

#18

投稿記事 by Ryo » 13年前

マイクロソフトの推奨してるCRTセキュリティでしたね
気づけませんでした。

閉鎖

“C言語何でも質問掲示板” へ戻る