14/05/27 13:47:09.06 eE9gvczq
ちょっと奇妙な現象に遭遇しています。
それはVS2013のC++コンソールアプリでデバッガで一行ずつ実行しているときに、
ごく普通の処理を順番に行っているにも関わらず、
(a) ①→②→③ となるはずなのに(番号は行番号のつもり)
(b) ①→②→①→②→③ のように、デバッガの矢印が一行上に戻るのです。
でも処理自体は、逆戻りした場合(b)でも①や②が二回実行されるわけではなく(a)の場合と同じ結果になります。
(c) ①→②→①→②→①→②→③ のように二回戻る場合もあります。
いままでVisualStudio使っていて初めて遭遇しました。
ちなみに②の処理はテンプレートを使った関数です。
今のところ特に問題が起こっているわけでは無いのですが、
ちょっと気持ち悪い現象なので、原因や解決方法ご存じでしたら教えてください。
622:デフォルトの名無しさん
14/05/27 13:50:31.31 4JNdWghQ
最適化をはずしな
623:デフォルトの名無しさん
14/05/27 13:51:27.16 eE9gvczq
①③は cout で文字列を画面に表示するだけの処理です。②で処理する文字列
の処理前と処理後の中身を確認するために、画面に出しています。
624:デフォルトの名無しさん
14/05/27 13:57:00.89 eE9gvczq
>>622
ありがとうございます。
最適化やめたら治りました。
一体全体どういうことでしょうか?
625:デフォルトの名無しさん
14/05/27 13:59:56.18 2wmi7VyA
>>615
XPユーザーへの嫌がらせを隅々まで浸透
626:デフォルトの名無しさん
14/05/27 15:20:10.47 Vajbu52a
>>624
最適化で元のコード行とアセンブラコードの関連性が保てなくなったため
627:デフォルトの名無しさん
14/05/27 15:28:46.50 EAN5Zn+I
たとえば、代入するだけでまったく使われないコードがあったとして
最適化では消されるから、ステップ実行すると飛ばされるからよくわかるw
628:デフォルトの名無しさん
14/05/27 20:58:13.92 iIiy8yYJ
そう言えば最適化ってVSのバージョン差で進化してたりするの?
629:デフォルトの名無しさん
14/05/27 21:37:02.60 XmUdi0bj
2次元のデータを扱うのに、vector<vector<T>>を使ったら、
トラバースとかコピーがめっちゃ遅くて困った。
試しにvector<T>で行×列分にシリアル化して持つようにしたらかなり高速化した。
速くなるのは当然なんだけど、二次元vectorがここまで遅いとは・・・
一次元vectorでやる場合は、1行当たりの幅を別途管理する必要があってスマートじゃない。
amp.hにあるarray_viewがまさに内部は1次元vectorで、かつ行列サイズも内包していて便利だから
代替しようかと思ったが、これは(unsigned)char型に対応しておらずエラーになる(涙)
やっぱ同等の機能を持ったカスタムクラス組むしかないだろうか?
vectorを継承して拡張ってできたりするのかな?
630:デフォルトの名無しさん
14/05/27 22:09:37.41 iIiy8yYJ
>>629
> array_viewがまさに内部は1次元vectorで、かつ行列サイズも内包していて便利だから
それアクセラレータと繋がっているんですけど速いんですかね……?
速さ言い出したらそもそもvector使ってる時点で
631:デフォルトの名無しさん
14/05/27 22:20:38.83 XmUdi0bj
>>630
実際にアクセラレータに転送されるのはConcurrency::parallel_forの引数のラムダ式に渡される際で、
それを呼ばない限りはCPU上で動作する、単なるvectorのラッパとして使えると考えています。
基本的には動的にサイズが頻繁に変わらないという前提であれば、
vectorであっても通常配列とパフォーマンスは同等と思いますが違いますか??
632:デフォルトの名無しさん
14/05/27 22:28:58.41 d2/Q/hOp
パフォーマンス気にするならSIMD使うし、アライメントが制御できないvectorは使いにくい
0初期化だとかコピーみたいのをするとか画像処理とかだと
1次元相当で処理することも出来るからスマートじゃないと言われてもそうしたほうが良いし
vectorにこだわる理由が記述が楽以外にないなら使わないほうが良さげ
633:デフォルトの名無しさん
14/05/27 23:22:41.10 XmUdi0bj
>>632
もちろん最大限のパフォーマンスを狙うならアライメント領域確保してSIMDなんですが、
利便性との兼ね合いでvectorあたりで手を打ちたいという状況なんです。
vectorから一旦アライメント領域にコピーしてからSIMD処理、という方法で、
コピーのオーバーヘッドを十分償却できるケースもあるので、妥協点としてはよいかな、と。
vectorは点数可変で、自身が点数の情報も持ち合わせている点が扱いやすいですし、
通常配列と同様にデータが連続したメモリ領域に配置されていてパフォーマンス的にも
(他コンテナであるlist等に比べて)まずまずですし、ちょうどよいと思っています。
あとは、これに多次元的なサイズをまとめられればベストなですが・・・。
pair(vector<unsigned int>,vector<T>)
第1引数:次元数とその各サイズ
第2引数:データ配列
とすれば標準のクラスだけでいけるかな?
634:デフォルトの名無しさん
14/05/28 00:01:08.62 /ucJIi4O
可変長配列クラスで要素数が多くなるとデバッグ実行だけ遅くて
リリースビルドでアタッチ無しで実行だと爆速になったりする
635:デフォルトの名無しさん
14/05/28 01:58:39.76 ox9uISuX
このスレはVSスレなのだか、vectorの話とかありなのか?STLスレでやるがよろしいでさか?
636:デフォルトの名無しさん
14/05/28 20:15:32.79 bqlMMKdd
vector は STL じゃない ← 今ここ
637:デフォルトの名無しさん
14/05/28 20:30:25.32 T2iubpyL
質問させてください。
ひとつのプログラムで画面隅の一部分は固定表示で「ボタン」が配置されており
その他の部分を上記の「ボタン」により「都度違う画面」として表示させたい場合はどういったコントロールを使用するべきでしょうか?
説明が分かり辛いかと思われますのでよくあるプログラムで例えるならばタブ付のブラウザのようなイメージです
タブを「ボタン」とし実際のウェブ表示部分が「都度違う画面」と想定してください
都度違う画面の内容はとある画面ではボタンコントロールの羅列だったり別の画面ではテキストの羅列だったり共通性はありません
現状はひとつのフォーム上に「パネル」たくさん配置し、その「パネル」ひとつひとつを画面として
固定部分に配置されたボタンによりパネルを表示・非表示にし製作しておりますが都度違う画面(パネル)が多くなるとVB上でのフォーム変更時にフォーム上がパネルだらけになって変更に戸惑ってしまいます
それともパネルではなく固定部分を同じにしたフォームを画面舞に作るべきでしょうか?その場合は固定部分のボタンコントロールが無駄に増えると思われますし・・・なにかよい方法はありませんでしょうか?
ご助言のほうをよろしくお願いします。
638:デフォルトの名無しさん
14/05/28 20:33:46.21 6RxarYIU
タブコントロール
639:デフォルトの名無しさん
14/05/28 22:30:17.55 MSfOewj0
今って入力画面プログラム作るなら何を選択すべきなの?
WinFormsは古いっつってもWPFも全然更新されてなくて未来がないみたいだし
SilverLightは死んでるし、だからLightSpeedなんて使えないし。
これは、おとなしくASP.netやっとけっていうMSのメッセージなの?
640:デフォルトの名無しさん
14/05/28 23:57:01.28 ox9uISuX
Javaがいいんじゃばいか
641:デフォルトの名無しさん
14/05/29 00:42:56.21 7xsmUOLy
画面ならhtml+javascriptがお手軽
今はなんたらjsでフレームワークが溢れかえってるし