C++相談室 part137at TECH
C++相談室 part137 - 暇つぶし2ch127:デフォルトの名無しさん
18/09/01 11:04:56.69 o5EcbkDPa.net
んだ
cstdintとかcinttypesとか使えば良いじゃん

128:
18/09/01 11:30:44.62 xvMvXv+W0.net
>>120
私はC++を覚えるのに20年くらいかかっています、アマチュアベースなので

129:デフォルトの名無しさん
18/09/01 12:18:34.89 Pcb6gvc+0.net
みんなそうだよ
C++はC with Classesから30年以上経っているが
未だに発展途上の言語で
新しい機能がどんどんできているから

130:デフォルトの名無しさん
18/09/01 12:35:41.52 +BAvd4bna.net
文法覚えてもそこがスタート地点
推奨される最先端の実装例を見てみたいがどこにそういう例があるのかも知らない
だれかしらないかなあ

131:デフォルトの名無しさん
18/09/01 12:51:44.34 Pcb6gvc+0.net
cl /std:c++latestや
clang-cl -Xclang -std=c++2aとかか?

132:デフォルトの名無しさん
18/09/01 13:05:09.71 eGvEpu9E0.net
レス㌧クス今全てがつながったわC++完全に理解した!
char→signed int変換を符号拡張でやっても良いという余地を残しておけば、
char→signed int変換を0拡張でやる命令が無いアーキテクチャーであっても、
(たまたま)使う文字コードセットがcharのMSBまで使わないやつ(acsiiとか)であれば
(運よく)変換を1命令で済ませられる
しかしcharをunsigned charとする案に対するアドバンテージはそれだけ…
我々は滅び去


133:った腸古代のアーキテクチャーの痕跡を毎朝目の当たりにしているわけや



134:デフォルトの名無しさん
18/09/01 13:20:25.67 eGvEpu9E0.net
>>130は、>>121へのレス
痕跡というのは、C++において(オーバーロードとの絡みで)charがsigned charでもunsigned charでもない別の型である件のこと。
>>127
職業的に使う言語とアマチュアベースで使う言語は接する時間が違うから、上達の速度も違う
C++はCに擬態することで職場でも家でも継続的に新規の機能を試せたから成功した
D言語は職場で12時間C/C++を触った後に家に帰ってD言語脳に切り替えねばならなかったからめんどくさがられて失敗した
この反省を踏まえ、Pythonはいつでも初心者モードでも問題なく使える簡単言語になったそうな
(ちな職場でこっそり使い倒せる言語はやっぱPerlとJavaScrip(ゲフンゲフン

135:デフォルトの名無しさん
18/09/01 14:18:13.49 kUpkBQ3x0.net
Linux プログラミング・インタフェース、Michael Kerrisk、2012
翻訳者・千住治郎
C++11/14 コア言語、江添 亮、2015
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
これらが、神の書!
膨大なOK・NG パターンを列挙している
これらの本を持って、数年山籠もりすべし!w
初心者用の文法書なんて、一部分しか書いていない。
氷山の一角
ドワンゴ江添の本でも、詳細には切りがないので省略しますとかw
無限に出てくるw
こういう本を書ける、Kerrisk・千住・江添は、頭がおかしくなってるはず!w

136:デフォルトの名無しさん
18/09/01 14:22:45.69 xvCOhCpk0.net
上の本高いな

137:132
18/09/01 15:18:22.65 kUpkBQ3x0.net
「Finnegans Wake」の著者、James Joyce も、
翻訳者の柳瀬尚紀も、頭がおかしいと思ったけど、
132 の本は、まさにそう
頭がおかしくないと、これだけ書けないw

138:デフォルトの名無しさん
18/09/01 16:12:55.71 wj4q5AyAd.net
vcのwriteFileとかの関数って非同期の時戻り値とかどう処理すべきもんなの?
waitforsingleobjectでまつのはセオリーっぽいが
そこにたどり着くまでに非同期の処理が終了とかまだ終わってないとかいろんなケース想定されるじゃん?

139:デフォルトの名無しさん
18/09/01 16:31:40.14 sbs5rSlN0.net
MSDNのWaitForSingleObjectのページ読んだ?
実際に書いてみた?

140:デフォルトの名無しさん
18/09/01 16:45:34.07 JqoAQjEz0.net
>>135
WaitForSingleObjectまでに非同期処理が終わってたらWaitForSingleObjectからすぐに抜ける
非同期処理が終わってなければ終わるまでWaitForSingleObjectで待つ
要するにWaitForSingleObjectから帰って来たら非同期処理は終わってる

141:デフォルトの名無しさん
18/09/01 17:05:45.30 /wwW4VSs0.net
いまだにメールで昔半角カナを使ってはいけないといわれてた理由すらわかってないのが
よくわかったわ
EBCDICは8bitとかいってるぐらいだからな
そんなもん意味不明なバイナリだからな
当然utf8も意味不明なバイナリ
頭悪い知恵遅れでも分かったふりしてテキトーなこと書けるのが
2ちゃんねるだからな
2ちゃんねるは頭の悪さを自白するのに最適

142:デフォルトの名無しさん
18/09/01 17:09:37.10 wj4q5AyAd.net
>>136
書いてみた
パイプを使ったデータのやり取りをしようとしていて
writeFileだけでなくConnectNamedPipeだったりの非同期処理の異常系で困っている
通常の操作はおそらくできてると思うんだが.


143:... >>137 やっぱりそういうことで良いんやね



144:デフォルトの名無しさん
18/09/01 17:46:30.13 C1azqw0O0.net
>>130
>C++完全に理解した!
小悟を経て大悟に至る長大なステップのほんの一段に過ぎない・・・

145:デフォルトの名無しさん
18/09/01 18:01:58.23 QGdL6q/H0.net
C++erは3種類しかいない
C++を理解せずに書いている素人、C++を理解したと勘違いしてる素人、いつか人類はC++を理解できるのだろうかと日夜考え続けている素人だ

146:デフォルトの名無しさん
18/09/01 18:06:49.23 IaxL4QGW0.net
C++はわしが育てた。

147:デフォルトの名無しさん
18/09/01 18:20:12.88 TMvFd8Nda.net
>>141
.0.5%ぐらいは真のC++プログラマーがいると信じたい
今まで出会ったことがない

148:デフォルトの名無しさん
18/09/01 19:13:37.84 np0z0HoI0.net
>>141
「完全な理解」に到達できないようゴールを動かしつづける黒幕、
てのがいそうな感じね。
日々の学習が新規格に追いつかないヘボの愚痴だけど。

149:デフォルトの名無しさん
18/09/01 19:30:28.67 YT761AP20.net
実際これ本物じゃないかと思うよね
URLリンク(www.kh.rim.or.jp)

150:デフォルトの名無しさん
18/09/01 20:34:01.15 IaxL4QGW0.net
>>145
Javaで読み替えてみ。

151:デフォルトの名無しさん
18/09/01 20:50:59.81 z2qK7ugE0.net
javaに必要だったのはGCじゃなくてデストラクタだったりして。
噂によると、参照切るために使い終わったらオブジェクトにNULL入れてるらしい。
それってfreeと違うんかい?

152:デフォルトの名無しさん
18/09/01 20:53:31.39 xvCOhCpk0.net
今使われてるあらゆる言語に置き換えられそう

153:デフォルトの名無しさん
18/09/01 23:46:43.62 IaxL4QGW0.net
進撃の巨人、エンドオブザワールド見たら、ミカサがいきなり不倫してて子供までいる設定に代わっててびっくりしたわ。
原作ではそんな子じゃなかったのに。

154:120
18/09/02 07:00:47.93 HcdhtgGT0.net
>>120です。レス少し遅くなっちゃったけどレスくれたみんな詳しくありがとう
とりあえずじっくり勉強してみることにするわ
このご時世、就活を意識するならPythonのほうが優先度は高そう感じがするけど…
就活についてのアドバイスしてくれた人がいるけど、納得した。
「できます」「つかえます」って基準が不明瞭だからさして効果はないか。
ちなみにどんなものを作れば有利に働くかな?
趣味でプログラミングをしているけど何か作りたいものがあってはじめたんじゃなくて競技プログラミングが面白そう、という理由ではじめて競技プログラミングをメインにやってた
Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな

155:デフォルトの名無しさん
18/09/02 07:15:15.45 fnBlw2CS0.net
>>150
査読論文
100万PVを超えるwebサイト
アプリのレビュー経験
上記以外はマイナスになるだけ

156:デフォルトの名無しさん
18/09/02 07:18:34.72 T+JOOtu00.net
会社によるし何したいかによる
言語仕様やコンパイラに強い人が欲しい会社もあるし
ハードウェアやアセンブリレベルに強い人が欲しい会社もあるし
CGとか映像処理に強い人が欲しい会社もあるし
Windowsのことなら任せろって人が欲しい会社もあるし
OSS界隈の事情に詳しい人が欲しい会社もあるし
コード土方なんかよりパワポのプロが欲しい会社もある
頑張って

157:デフォルトの名無しさん
18/09/02 08:54:14.95 5WqNet320.net
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
日本の大企業から、C の専門家、数十人が集まって、この本を書いたけど、
規格について詳しい人は、いなかった
規格書の条文を組み合わせたときに、どういう現象が起こるかわからない。
このレベルの人では、その恐ろしさをよく知っている
ルールの組み合わせ爆発が起こるから、無限!
だから規格を保証できない
よく、わからなかったから規格書を読めっていう奴がいるけど、
そういう奴は、組み合わせ爆発の恐ろしさを、何もわかっていない

158:デフォルトの名無しさん
18/09/02 10:18:27.88 5WqNet320.net
言語の入門書を読んで、文法だけを知っている人なんて、いらない。
文法だけじゃ、仕事はできない。
仕事とは、システムを作る事だから
だから企業は、コンピューターリテラシーのある人が欲しい。
OS の知識。システムの運用構築。
デザインパターン・アルゴリズム・データベースなど、すべての範囲
大量の勉強・資格も必要。
その人が到達したレベルの証明書
Ruby が出来たら、Python もわかる。
Rubyよりも面倒くさいのに、なにも、Pythonで書く理由がない
AI・数学系の仕事があって、初めてやるもの
float 変数にずっと、1を足し続けていくと、どうなるでしょう?
ちょっとした質問をされても、勉強していないと答えられないだろ

159:デフォルトの名無しさん
18/09/02 10:55:34.36 T+JOOtu00.net
>float 変数にずっと、1を足し続けていくと、どうなるでしょう?
答えてどうぞ
ちょっとした質問なんだろ?答えて

160:デフォルトの名無しさん
18/09/02 11:00:46.35 AnLHGx5M0.net
突然ケンカ売り始めてワロタ

161:154
18/09/02 11:38:28.02 5WqNet320.net
120 みたいな「入門書を読んで、出来ます」っていうような奴は、よくいる。
文法をかじったのと、システムを作るって言うのは、全く違う
コンピューターリテラシーが無いと話にならない。
文法よりも、情報処理資格を取った方が、よほど使える
8進数の637 を、16進数で表示しろとか、こういう問題
文法よりも、システムを作るための基礎体力がある人。
登山するのにも、まず基礎体力だろ

162:デフォルトの名無しさん
18/09/02 11:40:33.24 T+JOOtu00.net
>>157
逃げんな答えろ
>float 変数にずっと、1を足し続けていくと、どうなるでしょう?
正確に答えて

163:デフォルトの名無しさん
18/09/02 12:11:20.54 d5Sj8H4uM.net
>>158
プログラムで実行すればいいじゃん
馬鹿?

164:デフォルトの名無しさん
18/09/02 12:52:47.96 GR8jnF/50.net
>>158
環境による、以上!

165:デフォルトの名無しさん
18/09/02 14:37:45.13 5hf5Gg6np.net
>>150
>Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな
そっちの方が大きいと思うが・・w
ソフト一本作ったかどうか、ってのは大きいよ

166:デフォルトの名無しさん
18/09/02 14:52:19.54 4Jf6YH6e0.net
>>150
> Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな
そうかなあ?何処に就職しようとするかで変わると思うんだが、しかし、そこまでできるなら結構有利なネタになると思うんだけど。

167:はちみつ餃子
18/09/02 15:50:29.01 vK23Frpo0.net
とにもかくにも何かを「完成させる」ってのは強いと思うよ。
プログラミングに関する色んな理屈は研究されているけれども、
現実の問題に対して適用できる能力はまた別問題だからね。
深く知っているやつよりも目的を達成できるやつが偉い。
もちろん深く知っている方が色々な問題に対して出来ることは多いはずだけど、
実際にやったという見える実績がないと評価しようがないもの。
評価基準は評価する側のことだから、
ひょっとするとあまり気にしない評価者もいるかもしれないし、
高く評価するかもしれないということはある。
でも、無かったら何にも無いだけ。

168:
18/09/02 17:18:56.14 oSO4LvdH0.net
>>163
>とにもかくにも何かを「完成させる」ってのは強い
強いですね…
ある程度できてしまうと、情熱が失せるというか妥協するというか手を抜くというか
それを完成形に持っていくのには知性ではなく意志が必要だとおもいます、そして現在は知性(主知主義)よりも意志(主意主義)を評価する時代かと
私についていえば直近は
スレリンク(tech板:795番)-796
に執心していたのが、α版
スレリンク(tech板:52番)
ができてしまうと、ある意味どうでもよくなって、β版
スレリンク(tech板:53番)
を書き上げた頃は、変てこな義務感だけでいわば青息吐息で動いていた感じです、たぶんこれ以上手をいれることはないでしょう、全然未完成なんですけれども…

169:デフォルトの名無しさん
18/09/02 17:40:53.37 d5Sj8H4uM.net
ゲームってプログラムより素材でしょ

170:デフォルトの名無しさん
18/09/02 17:43:17.01 HUwXytGW0.net
まるでプロには知性が足りないとでも言わんばかりだな
君の書いたソレは売り物になるレベルのソフトなの?

171:デフォルトの名無しさん
18/09/02 17:44:50.35 HUwXytGW0.net
>>165
アホぬかせ

172:
18/09/02 17:56:52.92 oSO4LvdH0.net
>>166
どこを縦読みすれば?

173:デフォルトの名無しさん
18/09/02 18:21:41.50 4Jf6YH6e0.net



174:デフォルトの名無しさん
18/09/02 19:11:21.08 p4iMlD/t0.net
>>165 の意図を正しく読み取ってないかも知れんけど…。
プレイヤーにとっては、凄いプログラムで動いてるゲームより
~さんがキャラクタ描いてる、~さんが声アテている、の方が
購入の理由や評価の基準になってる、という面では
「プログラムより素材」と言えるかも。
テトリスやぷよぷよが売れたときは、
また別の意味で「プログラムより素材」だったんだけど。
現在ではマインクラフトなどかな。

技術的にスゲーって感じたゲームはPS2の「大神」だったかな。
それ以後あんまり遊んでないし。

175:デフォルトの名無しさん
18/09/02 19:17:19.67 KDgwy3t20.net
君らいっぺん3Dのゲームがどういう技術で成り立ってるか調べたらいいよ
全く想像つかないのに適当こいてるだろ?

176:デフォルトの名無しさん
18/09/02 19:26:28.00 fUkDgbHp0.net
>>171
しらべてみたら監督技術、プロデュース技術、ディレクション技術なんだな。
一番重要なのは資金調達技術だって。
思ってたのと全然違うわ。

177:デフォルトの名無しさん
18/09/02 19:29:29.85 KDgwy3t20.net
アホだろお前

178:デフォルトの名無しさん
18/09/02 19:32:57.27 fUkDgbHp0.net
ゲーム業界ではパワポを使いこなせないと会議で発言権を得られないって聞いたことがあるな。

179:デフォルトの名無しさん
18/09/02 19:35:22.26 fUkDgbHp0.net
そういえばジョブス氏も皆さんの前でお話しするときはパワポ使ってたよね。
WindowsよりOSXというお話をするときでさえ、スクリーンにはパワポが映ってた。

180:デフォルトの名無しさん
18/09/02 19:36:03.23 4Jf6YH6e0.net
話がいつの間にか売れるゲームの話になってる?
元の話は学生が就活時にCでゲーム作った事が役に立つかって話だったと思うが。

181:デフォルトの名無しさん
18/09/02 19:37:22.81 4Jf6YH6e0.net
>>175
Macで動くやつではなく?

182:デフォルトの名無しさん
18/09/02 19:55:02.00 KDgwy3t20.net
>>176
なってないw
QZと165に釘さしたかっただけ
別に趣味グラマを否定したいわけじゃないけど、一本人が使いたがるようなレベルのソフトを作ろうとすると、言語の知識だけではない様々な現実的な問題に直面するだろ
それを乗り越えたかどうかってのは採用担当の評価に大きく関わってくると思うけどね
はっきり言うと、QZのレスは、それを乗り越えるのは意志だけ(つまりソフトを作り上げるために必要になってくる知識など、言語の知識以外には無い)と暗に決めつけてる
最近そういう傲慢な趣味グラマがC++界隈でよく見受けられるけど、そういうの良くないよマジで

183:デフォルトの名無しさん
18/09/02 20:08:55.68 Tb3tt8fk0.net
それでコードはもうすでに自分は書けるもんだと勝手に思い込んで
まともな教育を受けてない低学歴知恵遅れのアホなくせに思い上がってるウンコが
この板にはわんさかいる
視野が狭いとそうなる
低学歴知恵遅れはどうしても視野が狭くなる
知見の範囲が限られるからな

184:
18/09/02 20:09:48.00 oSO4LvdH0.net
>>178
>QZのレスは、それを乗り越えるのは意志**だけ**
>>164 ではそうはいっていませんよ、意志の重要性を主張していますが、知性(=知識)が不要とはいっていない、ちょっと言葉が足りなかったのは認めますが
知性がなければ、そもそもプログラムを記述することすら出来ないでしょう?
文脈としては >>150 を応援している内容です
「根性論」の気配を感じて反感をもたれているのだろうとは推察しますけれども

185:デフォルトの名無しさん
18/09/02 20:12:17.71 Tb3tt8fk0.net
質問してるヤツ未満のとにかく程度の低いウンコが
この板で幅をきかせてるのが一番の問題

186:デフォルトの名無しさん
18/09/02 20:30:49.80 fUkDgbHp0.net
質問者のほうが詳しいもんな。

187:デフォルトの名無しさん
18/09/02 20:32:00.95 ZRAAplmr0.net
暗にマウンティングしようとしすぎなんだよ、聞かれたことだけ答えてろ

188:デフォルトの名無しさん
18/09/02 20:40:57.55 x4is64QR0.net
>>167
いや、俺はゲームプログラムは作れるが
絵や音楽は無理だわ

189:デフォルトの名無しさん
18/09/02 20:42:56.80 fUkDgbHp0.net
絵や音楽を作るAIをプログラミングすれば。

190:デフォルトの名無しさん
18/09/02 22:53:04.36 fUkDgbHp0.net
gperfをconstexprで実現するライブラリない?

191:デフォルトの名無しさん
18/09/02 22:54:40.74 fUkDgbHp0.net
>>153
数十人も集まったら臨界起こる。
危険。

192:デフォルトの名無しさん
18/09/03 14:05:29.69 oGMLPH120.net
>>170
ぷよぷよにしろテトリスにしろ完全に動くから売れるんだぞ
数年前に家庭用機に動きもっさりバグだらけのテトリスがあったが発売数日で誰もやってなかったよ

193:デフォルトの名無しさん
18/09/03 20:11:20.95 e/XZidXx0.net
数年て
30年近く前の話だろそれ…

194:デフォルトの名無しさん
18/09/03 20:23:04.08 JI8nhEFS0.net
何言ってんだこいつ・・・w

195:デフォルトの名無しさん
18/09/03 20:23:26.23 CjQwreEv0.net
無論コレですな
URLリンク(koty.wiki)

196:デフォルトの名無しさん
18/09/03 20:45:30.49 e/XZidXx0.net
てっきり任天堂のファミコンテトリスの話かと

197:デフォルトの名無しさん
18/09/03 20:54:01.67 oGMLPH120.net
xboxoneだぞ

198:デフォルトの名無しさん
18/09/03 20:57:10.35 E2St7m4+0.net
テトリスごときでcなんか不要
javascriptで十分
URLリンク(codepad.org) ← コレでできあがり
このコードをメモ帳にコピペしてaho.htmlで保存
 ↓
aho.htmlダブルクリック
 ↓
テトリス起動

199:
18/09/04 00:05:00.11 lJV/Mb/R0.net
以前の話
スレリンク(tech板:942番),943
やりたいこと
スレリンク(tech板:713番)
質問
一つの bitset または vector<bool> に対して、異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?
やりたいことはエラトステネスのふるいなので、この場合オンしたあとオフすることはありません
こういうことをして大丈夫かどうか調べてみたけれどもよくわかりません
bitset URLリンク(ideone.com)
vector<bool> URLリンク(ideone.com)
付随しての質問
biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?
この場合
bitset[index] = boolean,
とか
vector[index] = boolean
(operator[] が「bool の参照」


200:?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?



201:さまよえる蟻人間
18/09/04 00:09:11.92 I66W1B5fd.net
See source by your IDE.

202:はちみつ餃子
18/09/04 00:37:21.78 f5HJ/2BD0.net
>>195
> 異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?
矛盾というのがどういう状況を想定しているのかわからないけど、
言語仕様上はデータ競合が起こりうると解釈できる場面だと思う。
要するに未定義動作に突入する可能性がある。
mutex でロックすることで簡単に回避は出来るが速度を考えるならば
操作するデータが atomic であるようにデザインするとなんとかなるかも?
> biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?
される。
> bitset[index] = boolean,
> とか
> vector[index] = boolean
> (operator[] が「bool の参照」?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?
「1 ビットを表す型」のオブジェクトを返すことで対応する。
そのせいで、 std::vector<bool> は bool 以外を格納する std::vector よりも出来ることに若干の制約がある。

203:はちみつ餃子
18/09/04 03:10:23.32 f5HJ/2BD0.net
テトリスの素材を用意したぞ
URLリンク(dotup.org)

204:デフォルトの名無しさん
18/09/04 05:42:55.53 4a01gUXa0.net
惜しい、もうちょっと工夫すれば
「テトリス」だけでなく「○○トリス」としても使えるのに。

205:デフォルトの名無しさん
18/09/04 06:42:41.96 Nt/zN6W10.net
URLリンク(i.imgur.com)
むぅ…

206:デフォルトの名無しさん
18/09/04 07:24:16.79 FJBPHmlLM.net
>>195
アーキ依存だが、同一バイトアライメントを参照しない限り問題ないってエロい先輩が言ってた
大人しくmutexつかえ、mutexのコストよりスレッド切り替えのコストを気にしろ、とも言われた

207:デフォルトの名無しさん
18/09/04 09:34:15.28 W1MTXd47M.net
>>201
何のアライメントのことかわからないけど
キャッシュライン同じだとだめじゃないの

208:デフォルトの名無しさん
18/09/04 17:05:52.60 QK+jEBGl0.net
こういう待ち時間が僅少なものはスピンロックの方がいいぞ

209:デフォルトの名無しさん
18/09/04 18:06:05.25 W1MTXd47M.net
というよりこの場合CASが成功するまで繰り返せばいいだけ

210:デフォルトの名無しさん
18/09/04 18:43:17.89 QK+jEBGl0.net
bitset 位なら自分でcasで実装するのが最善か

211:デフォルトの名無しさん
18/09/04 20:32:54.12 j0Ybv1km0.net
C++に標準で画像を表示する方法がないと聞いたけど
どんな方法で出来るのか教えてくれないか?
openGLとダイレクトX以外にないものなのか

212:さまよえる蟻人間
18/09/04 20:35:12.07 I66W1B5fd.net
GDIならウィンドウに画像表示できるよ。

213:デフォルトの名無しさん
18/09/04 20:40:18.08 j0Ybv1km0.net
そんなものがあるのか 調べてみるわ

214:さまよえる蟻人間
18/09/04 20:44:23.36 I66W1B5fd.net
他にもgtkmmとかQtというのも、ウィンドウに画像表示できる。

215:デフォルトの名無しさん
18/09/04 20:47:51.19 j0Ybv1km0.net
3つだけじゃないんだなw
ありがとうそっちのほうも調べてみるよ

216:
18/09/04 21:01:31.49 lJV/Mb/R0.net
>>197 はちみつさん、>>201,203-205
コメントありがとうございます。
>>204,205
初めて atomic を使ってみました
URLリンク(ideone.com)
そのままでは atomic を vector の要素にはできないようで、stackoverflow 由来の変てこな回避策をとっています
URLリンク(stackoverflow.com)
マルチスレッドでの評価はこれからとりかかりますが、
こんな感じで CAS できてますでしょうか

217:デフォルトの名無しさん
18/09/04 21:44:16.54 rJd6gmxFM.net
なんとなくだけど、
vector<bool>でなくてよいのなら、複数スレッドからビットをonにしまくったところでそもそも問題にならないのでは?

218:デフォルトの名無しさん
18/09/04 22:20:34.19 gG5zqknwd.net
windowsでのパイプでのやり取りに詳しい人助けてくれませんか
あとで一部ソースコードは載せます
パイプ処理を非同期で行いたい
1. CreateNamedPipeで名前つきパイプを作成
2. CreateEventでオーパーラップ構造体にシグナル用のイベントをひもづける
3. 「非同期」でConnectNamedPipeを行う
4. WaitForSingleObjectでタイムアウトか接続が来たらパイプのコネクトをする
この流れで処理を作ろうとしてる
ただ、非同期な設定にすると上手く繋げず困ってます
そもそも名前つきパイプで非同期処理はできない..??
msdnにはCreateNamedPipeの第3引数にPIPE_WAITかPIPE_NOWAITかあるが、
PIPE_NOWAITは使用しないでくださいとあるのでPIPE_WAITを指定すると同期処理で待機することはできました
ただし、接続が来なかったらタイムアウトみたいなことができないので、ためしにPIPE_NOWAITにするとGetLastErrorによると218のエラーを返してくる
オーパーラップ構造体を指定したらConnectNamedPipeは非同期云々掛かれてるけどもできないのかな..?

219:デフォルトの名無しさん
18/09/04 22:34:45.20 Nt/zN6W10.net
どうやっても無理

220:デフォルトの名無しさん
18/09/04 22:41:49.50 GmxIRs0ad.net
dirty とか使わず単に
set
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
reset
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
じゃないのよく分からんけど

221:デフォルトの名無しさん
18/09/04 22:47:11.82 gG5zqknwd.net
>>214
それまじすか....

222:デフォルトの名無しさん
18/09/04 23:05:32.40 Nt/zN6W10.net
>>216
待たないでデータ読むにはPeekNamedPipeの第五引数cbAvailでサイズ判定してcbAvailが0以外ならデータ読んでも止まらない
これ以外の方法は何やってもダメ
Linuxみたいにすんなり行かんね

223:デフォルトの名無しさん
18/09/04 23:07:37.86 gG5zqknwd.net
>>217
そうなのか
今読めてるのは全部同期処理してるのか...
今からそのAPI調べてみる
読み込むのはそれでよかったとしてコネクトも同じ考え?

224:デフォルトの名無しさん
18/09/04 23:07:51.12 b2qgijeQr.net
sort に渡す比較関数って、たとえば
sort(A.begin(), A.end(), [](int a, int b){return a > b;});
としたら、降順になるのか昇順になるのかいつも分からなくなるんだが、どうやって覚えたら良いの
不等号の向き、つまり return で返る真偽とコンテナの要素番号の大小がどう対応してるのか分からない

225:デフォルトの名無しさん
18/09/04 23:59:12.10 IwUdbTOo0.net
a, bで順序がわからなくなるのなら、
first, secondとかleft, rightとかにすればいいんじゃね?
first < secondが昇順でなかったらクレーム続出だろ

226:デフォルトの名無しさん
18/09/05 00:07:00.10 p8WqhzKed.net
サーバー側だけどこんな感じです。
スマホで打つの限界がある...
{
HANDLE handle = CreateFileName(" \\\\.\\pipe\\"sample ,
PIPE_ACCESS_DUPLEX,
// ここの | って意味あるのかな?
// 両方とも0なので
PIPE_TYPE_BYTE |PIPE_READMODE_BYTE | PIPE_WAIT,
1,
0,
0,
0,
NULL );
OVERLAPED over = {0};
over.hEvent = CreateEvent(NULL, TRUE, FALSE, "sampleEvent");
BOOL result =ConnectNamedPipe(handle, &over);
DWORD error = GetLastError();
if( ( 0 == result) &&
( ( ERROR_SUCCESS == error ) || ( ERROR_PPE_CNNECTED != error ) || ( ERROR_IO_PENDING != error ) )
{
WaitForSingleObject(); //本当はここで待ってほしいが、ConnectNamedPipeで止まる
}
}

227:デフォルトの名無しさん
18/09/05 00:13:10.80 9rSvLDak0.net
>>213
何がいいたいのかよく分からんな。
4のwaitforでタイムアウトか接続されたか分かるよね?
普通に問題なく動くよ。

228:デフォルトの名無しさん
18/09/05 00:18:10.89 VENvGGw0d.net
>>222
理想の流れは1-4の流れにしたかった
ただ実際は非同期処理が上手くできておらず3のConnectNamedPipeで捕まる
クライアント側が居なかった場合ずっと待機し続けることになる
そうなっているのが現状
ソースは思い出してかいたのが>>221

229:デフォルトの名無しさん
18/09/05 00:30:09.32 +wARDt+J0.net
ココにサンプルコードがある
URLリンク(eternalwindows.jp)
FILE_FLAG_OVERLAPPED を追加する
よく分からんがコレとはまた違うのか

230:デフォルトの名無しさん
18/09/05 00:37:34.35 ABz0W8sZd.net
>>224
FILE_FLAG_OVERLAPPEDの使用はまだ試してないので明日試してみますありがとう
FILE_FLAG_OVERLAPPEDに関しては持たないときの条件を使ってたんだけどだめだったんかな...
これをしたかったのだが...
URLリンク(msdn.microsoft.com)
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、この関数は非同期的に実行されます。
制御はすぐに返り、戻り値は 0 になります。GetLastError 関数は、ConnectNamedPipe 関数を呼び出す前にクライアントプロセス側が接続されていたときは
ERROR_PIPE_CONNECTED を、そうでないときは ERROR_IO_PENDING を返します。

peekNamedPipe読んでるけど難しい

231:デフォルトの名無しさん
18/09/05 01:24:39.22 BafBBEgt0.net
peekで調べるのはcbAvailだけ
データは読まなくていい
読むときはReadFile

232:デフォルトの名無しさん
18/09/05 02:51:54.52 n3z3O06I0.net
C++関係無いよね
Win32APIスレに行くべきだと思う
URLリンク(msdn.microsoft.com)(v=vs.85).aspx
こっちにはその部分に相当する箇所が無いようにみえる
FLAG_OVERLAPPEDの有無で非同期/同期は決まるんじゃないのかなぁ
>If hNamedPipe was not opened with FILE_FLAG_OVERLAPPED, the function does not return until a client is connected or an error occurs.
ってあるし

233:デフォルトの名無しさん
18/09/05 12:47:17.08 TWmx8fnR0.net
>>223
>クライアント側が居なかった場合、ずっと待機し続ける
パイプって、パイプラインにデータが流れてくるまでは、ブロックされるものだろ。
データも流れて来ないのに、先へ進んだら、バグるだけ
その際、非同期なら、データ無しで、即座に返答が返ってくるのでは?

234:デフォルトの名無しさん
18/09/05 13:15:20.01 mkiFi/5o0.net
入力が「まだ来んからちょ待っとれ」なのか
「来るわけないやろアホかおまえ」なのかは
別の手段で判断せにゃならん

235:はちみつ餃子
18/09/05 15:48:09.73 QNa0Ltxl0.net
まあ常識的には適当な時間でタイムアウトするようにするくらいのものかな。

236:デフォルトの名無しさん
18/09/05 16:08:15.65 Nag0NR3Rd.net
>>221
URLリンク(stackoverflow.com)
PIPE_NOWAIT を使えば ERROR_PIPE_LISTENING だの ERROR_IO_PENDING が即座に返されるが
WaitForSingleObject は発火しない
PIPE_WAIT だと当然ブロックする
PIPE_NOWAIT はlan managerとの互換性のために残されているだけで使用は推奨されていない
面倒でも FILE_FLAG_OVERLAPPED を使うしかない

237:デフォルトの名無しさん
18/09/05 16:09:55.39 Nag0NR3Rd.net
と書いたけどカッコつけずに後先考えず PIPE_NOWAIT でポーリングしてもいいか

238:デフォルトの名無しさん
18/09/05 18:53:58.76 H6UyuApwM.net
void hoge(int x, int *returnint){
returnint = int * 2;
}
int hoge(int x){
return int * 2;
}
これって内容同じですか?

239:デフォルトの名無しさん
18/09/05 19:15:02.29 BafBBEgt0.net
どっちもコンパイルエラー出る点では同じ

240:デフォルトの名無しさん
18/09/05 19:32:27.66 YeNc+rPy0.net
>>233 C言語に対して重大な勘違い、または質問レスに些細な打ち間違い、
どちらかだと思うが、どちらかは分からない。

241:235
18/09/05 19:33:03.57 YeNc+rPy0.net
C言語じゃなくてC++だね、ここ。

242:デフォルトの名無しさん
18/09/05 22:59:59.06 yXdlNP4XM.net
selectしろや

243:
18/09/05 23:22:24.89 juRrGCxW0.net
>>215
内容をみてくださり感謝いたします、とても考えさせられました
まず >>211 に二点誤りがありました
・コンストラクタ引数に与える bit 数から、内部 vector<atomic<int>> の確保容量を計算する方法に誤りがあった
・CAS 後にスピンロックするかどうかの判断にあやまりがあった
修正 URLリンク(ideone.com)
>>215
>while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
>while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
>(e は未初期化状態でも構わない)
>>195 「やりたいことはエラトステネスのふるいなので、この場合オンしたあとオフすることはありません」
に範囲を限定するのならば >>215 はうまくいくと思います。これには「なるほど!!」と思いました。
ビットセットの最中は別スレッドのビットリセットやビットテストをスピンロックさせたい、
とかの排他制御をやるのならば、dirty-bit(というか1ビットセマフォ)を作らないといけないと考えています

244:デフォルトの名無しさん
18/09/06 02:04:16.57 Gt7E2PT1M.net
>>234,235
すみません
C++にあまり詳しくないのでわからないのですが、どこがおかしいのでしょうか?
これなら内容等しいですか?
void hoge(int x, int& ret){
ret = int * 2;
}
int hoge(int x){
return int * 2:
}

245:デフォルトの名無しさん
18/09/06 02:08:35.51 itCyrIVk0.net
それはギャグで言っているのか?
void hoge(int x, int& ret){
ret = x * 2;
}
int hoge(int x){
return x * 2:
}

246:デフォルトの名無しさん
18/09/06 02:15:35.03 Ev1vpWJGM.net
>>240
すみません素でボケてました…
それなら同一ですか?
returnする場合と参照渡しする場合の違い(速度など)があるのか知りたかったです

247:デフォルトの名無しさん
18/09/06 02:38:44.74 itCyrIVk0.net
えーっと、
上段の参照渡しは呼び出し時に渡した変数そのものがやってきて書き換える。
下段のやつはコピーを返すので一手間ある。
理論的には下段の方がちょっと遅い。
まぁ、コンパイラが頑張ってきえるかもしれんし、
デルタ時間的に差はあるかもしれないが最近のコンピュータならあまり問題にならない。
それよりも速度を気にするなら採用しているアルゴリズムを精査したほうが効果的。
ちょっと変な文になった。

248:デフォルトの名無しさん
18/09/06 05:45:03.77 UQb09hzL0.net
厳密なところはアセンブラ出力を個別に見ないと分からない、
という前提はひとまず措くとして…。
int x, ret1, ret2; // x が未初期化ってところは見逃してくれ
hoge_ref(x, ret1); // void hoge(int x, int& ret)
ret2 = hoge_val(x); // int hoge(int x)
上は第2引数に参照を渡す手間が必要な代わりに返り値の処理は不要
下は引数1個で済む代わりに呼出側で返り値を別の変数に代入しなきゃいけない
相殺してどっこいどっこい大差なし、じゃないかな。
計算結果を変数に入れる必要がない場合、等はまた別のお話。

249:はちみつ餃子
18/09/06 05:49:16.79 IzfX8EX20.net
>>240
後者の末尾がコロンになってるのがそのままやで。

250:はちみつ餃子
18/09/06 05:59:16.76 IzfX8EX20.net
仮に差があったとしてもナノ秒レベルの話やん

251:デフォルトの名無しさん
18/09/06 07:14:55.98 3Sjg8sdP0.net
速度どうこうは1兆回回すループの中にあるとか1マイクロ秒以内に完了しないと原子炉が爆発するとか
プロファイラでクソ時間がかかってることが判明したとかした時だけ気にしよう

252:243
18/09/06 08:27:46.68 UQb09hzL0.net
実際のところ「別のお話」と切り捨てた部分が大切でね。
元の質問から逸れてしまうけど。
関数が計算する結果の値だけが欲しい(別の変数に格納する必要がない、
格納すべき変数そのものが存在しない)場合とか、
返り値に相当するのがint等の単純なデータでなく大きなクラスの場合とか、
その辺りを基準に比較すべきなんだよ。

253:はちみつ餃子
18/09/06 08:44:12.19 IzfX8EX20.net
早すぎる最適化は諸悪の根源っていうもんな。

254:デフォルトの名無しさん
18/09/06 08:51:51.10 j/wx9LUv0.net
同意。固定長オンリーなどの最適化を最初から入れ込むとロクなことがない。

255:デフォルトの名無しさん
18/09/06 09:29:04.75 mrWZ3sxKM.net
そーそー
尻拭く時間だけ早くしてもンコが早く出なきゃしゃーない

256:デフォルトの名無しさん
18/09/06 10:29:33.35 c/F3wcvdM.net
>>242
何言ってんの、逆でしょ
差が観測できるかは別にして下の方が速い(効率的)
int返すならレジスタ返しなんだから
メモリアクセスよりずっと速い

257:はちみつ餃子
18/09/06 10:57:52.18 IzfX8EX20.net
>>251
関数単独を見るとそうだが、
レジスタで返してもそれを結局は変数に書き込むじゃんという >>243 の話と合わせて考えると
レジスタを経由する分だけ遅くなり得るっしょ。
ただ、この関数を実行した結果を長期には保存しない (式の途中でこの関数を使うとか) のだと
後者の方が速かったりもするだろうし、まあ、状況によるよな。

258:はちみつ餃子
18/09/06 10:58:36.13 IzfX8EX20.net
実際のところ、インライン化されて更に他の最適化とコンボが起こったりすると
普通の人間にはどうなるか予測がつかんので考えるだけ無駄。

259:デフォルトの名無しさん
18/09/06 11:15:06.66 c/F3wcvdM.net
>>252
なんで呼び出し側の話がはいってくるんだよ
そっちの話を含めるとしても
呼び出し側もレジスタのまま処理が行われるのが普通だし、
メモリに書き出されるとしても、
参照と同程度になるってだけ
このABIを理解するのはc/c++使う上で基本
無意味と思うのは結構だがそれはお前の関心がないってだけ
レスしなけりゃいい

260:デフォルトの名無しさん
18/09/06 12:11:07.39 uRta3OIBM.net
intの場合は速度差は特に考慮しなくて良いんですねありがとうございます
それと、関数内でOpenCVで画像をゴニョゴニョして、結果の画像をリターンしたい場合は、どちらが良いのですかね?
特にメモリリークを起こしたくない(今現在起きてるので改善したい)ので、もし何か重大な違いがあるなら知りたいです
void hoge(cv::Mat x, cv::Mat ret){
ret = x + cv::Scalar(100);
}
cv::Mat hoge(cv::Mat x){
return x + cv::Scalar(100);
}

261:はちみつ餃子
18/09/06 13:28:43.07 IzfX8EX20.net
>>254
呼出し側の状況によっても変わりうるから呼出しの状況を含めるってのがそんなにおかしな話かね。
あと、あくまでもこれは C++ という言語を中心にした一般原則としてどうコンパイルされることも「有りうる」ということを述べているのであって、
特定のアーキテクチャやコンパイラや ABI を想定したものではないよ。
多くの (あるいは主要な) 処理系であなたが言うような結果になるというなら、
それはそうかもしれないが、そこには単に私の関心がないのも確か。

262:はちみつ餃子
18/09/06 13:34:38.93 IzfX8EX20.net
>>255
前者のコードの cv::Mat ret は cv::Mat& ret の間違い?

263:デフォルトの名無しさん
18/09/06 13:53:20.00 c/F3wcvdM.net
>>256
それはお前の間違った理解であって一般とは言わない
だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
お前の理屈だとレジスタの返しが無用となるじゃないか
x64ならraxでaarch64ならx0で返り値を返す
32bitのレガシーならいざしらず64bitでもabiはそう決められてるわけ
お前の興味のない低いレイヤーではそういうのを最大限活用して効率的にcpu回してんだよ

264:はちみつ餃子
18/09/06 14:06:16.01 IzfX8EX20.net
>>258
> だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
それは >>254 のことだろ?
それは特定の命令セットや ABI でないと成り立たないから、
そうでない一般論としてはどうともなりうると私は言っているので論点が違うし、
私はそっちの論点は気にしてなかったという話じゃないか。

265:デフォルトの名無しさん
18/09/06 14:09:29.47 c/F3wcvdM.net
>>259
現実のはなししようぜ
成り立たないシステムあげてみなよ

266:はちみつ餃子
18/09/06 14:11:05.68 IzfX8EX20.net
>>255
知らんな。
関心は無い。

267:はちみつ餃子
18/09/06 14:27:25.26 IzfX8EX20.net
>>255
前者については & の脱字だと仮定して答えるけど、
その脱字が無ければ、前者でも後者でも最終的な結果に差はないと思う。
特にメモリリークにつながりそうな要素もない。
ただ、単純に、局所的に考えるならば後者の方が効率的と言えると思う。
前者だと呼出し側では結果を受け取るための cv::Mat 型の変数を用意しなければならないが、
そのときにデフォルトコンストラクタが走ってから結果は operator= で格納するという形になる。
後者だとコピーコンストラクタ一発で済むので簡単。 場合によっては RVO が適用されるかもしれない。
一度作った変数を何度も結果格納用に使いまわすのならば、
前者の方がメモリアロケーションの回数を抑制できる (効率的になる) 可能性も有るけど、
Mat の実装次第ではそうならないかもしれないし、
そこらへんは実際にやってみないとわからない。
ところでメモリリークが起きていると判断したのは何かツールを使って検証したの?

268:はちみつ餃子
18/09/06 14:31:00.99 IzfX8EX20.net
あっ、 >>261>>255 にアンカーを付けちゃったけど、これは >>260 の間違いね。
現実の話というなら、インライン化や最適化が入れば ABI もクソもねぇし、
そんなの考えたらキリがないやろ。

269:デフォルトの名無しさん
18/09/06 18:25:26.14 c/F3wcvdM.net
>>263
関数内の最適化のみで考えればいいだけなんだからきりはあるだろ
つまりインライン展開なし、LOTなし
ABIを意識するのは全然特殊じゃない
言語間のよびだしはざらだし、
クラッシュダンプにスタックトレース残すためにあえてインライン抑制したりする
お前が経験不足なだけだよ

270:はちみつ餃子
18/09/06 18:41:01.02 IzfX8EX20.net
>>264
そっちの脳内でどんな前提を置いてるかなんて知らんがな。

271:デフォルトの名無しさん
18/09/06 19:48:52.61 c/F3wcvdM.net
>>265
コテハンの割に薄いやつだ
もとの質問は関数から値の返し方についてどちらが速いかという質問なんだから、
関数のインライン展開がないと仮定すれば、定性的に答えられる問いだ
かつその仮定は別に現実ばなれしてるわけでもない
それをお前はその知識が有用であることも知らずに考えるだけ無駄とかぶったぎってるわけだ
このスレは相談室
無駄なのはそういうお前の存在ではとおれは思うわけ

272:デフォルトの名無しさん
18/09/06 20:12:24.70 64ZwjQvb0.net
malloc()したヒープはfree()解放するのは当然
ウンコしたあと水で流さないぐらい行儀が悪い

273:デフォルトの名無しさん
18/09/06 20:23:27.14 itCyrIVk0.net
メモリーリークは基本的に自分でNEWすることで起こる。
最近のC++では基本的に自分でNEWすることはほとんどない。
動的なメモリが欲しければvectorを使う。
後は、ポインタにインスタンスを確保しないで関数に投げるとかもやってはいけない。メモリを破壊することになる。
あと、どうしてもnewが必要だったりGCが必要な時はスマポを使う。
そういう作法でやると、ユーザーコードでnewすることはほぼない。

274:デフォルトの名無しさん
18/09/06 20:47:20.81 itCyrIVk0.net
えーっと、関数にポインタを投げる時はその関数の仕様を精査して扱わないとほんとやばい。

275:デフォルトの名無しさん
18/09/06 21:04:04.33 bw6Oo6uj0.net
newとdeleteを使いこなせない補助輪付C++グラマってのも問題だけど

276:デフォルトの名無しさん
18/09/06 21:10:02.71 iyjSCMca0.net
スマポはGCじゃねえよ ぼけ

277:デフォルトの名無しさん
18/09/06 21:14:09.31 itCyrIVk0.net
shared_pointerは参照カウントっていうGC機構ですよ?

278:デフォルトの名無しさん
18/09/06 21:17:21.85 itCyrIVk0.net
>>270

279:デフォルトの名無しさん
18/09/06 21:18:00.66 itCyrIVk0.net
おっと。
>>270
補助輪があろうがバグ出すよりマシだと思うよ。それと保険的な意味もあるし。

280:デフォルトの名無しさん
18/09/06 21:18:22.90 iyjSCMca0.net
CGってそもそも何だ?
アプリが「今、解放しろ」というタイミングで動くのをGCというならfreeもGCだぞ

281:デフォルトの名無しさん
18/09/06 21:20:24.16 64ZwjQvb0.net
いつ解放されるか分からないとか
そもそもオブジェクトの外部でポインタの生存期間を制御できてないコードがヤバイわ

282:デフォルトの名無しさん
18/09/06 21:24:58.09 itCyrIVk0.net
>>275
そういう、広義解釈は話題が滅茶苦茶になるのでやめましょう。
GCはガベージコレクションだよ。freeは解放関数だよ。
シェアードポインターの解放タイミングは普通コントールしないのでGCだと思ってます。
というか、開放タイミングが未定だからシェアードポインタ使うんじゃないですか?

283:デフォルトの名無しさん
18/09/06 21:27:59.96 itCyrIVk0.net
それは全能でないとバグが出ちゃうのでこういう機構が発明されました。
書くときは大まかには寿命は把握しているとは思うのですが、細部までは精査しないことが多いんじゃないでしょうか。
自分のクローンに共有オブジェクトを持たせるときとか普通に書くと滅茶苦茶大変ですよ?

284:デフォルトの名無しさん
18/09/06 21:37:24.49 iyjSCMca0.net
>>277
広義解釈してるのはおまえだよ
シェアードポインタの解放タイミングはデストラクタだろうがよ
freeと何がどこが違うんだよ
おまえどこまでオレオレ空想してるんだ?

285:デフォルトの名無しさん
18/09/06 21:38:17.39 itCyrIVk0.net
>>276
それはある程度アクセス権の範囲を考えれば何とかなりそうな予感。
それと開放した後のメモリ叩かれた時とどっちがいいか相談ってことで。

286:デフォルトの名無しさん
18/09/06 21:41:02.92 itCyrIVk0.net
>>279
複数の共有がある場合、一個のデストラクタが走った程度では解放されませんよ?
freeは別にデストラクタに仕込む必要ないじゃないですか。
それと、複数の共有がある場合適切にfreeできますか?

287:デフォルトの名無しさん
18/09/06 21:42:45.15 JT+LXegNM.net
コレクションしてないのになんでgcなんだよ。アホすぎる

288:デフォルトの名無しさん
18/09/06 21:43:23.10 bw6Oo6uj0.net
シェアードはマルチタスクには不向きだし

289:デフォルトの名無しさん
18/09/06 21:49:40.12 itCyrIVk0.net
コレクションサイズが1のコンテナはないのですね。まぁ、冗談は置いといて。
物事を知ってるなら後は任せました。無知でごめんなさい。

290:デフォルトの名無しさん
18/09/06 21:51:04.10 itCyrIVk0.net
>>283
マルチスレッドならアトミックにできた気がしますけど、どうでしたっけ。
マルチプロセスならそもそもメモリ空間が違うのでお門違いですね。

291:
18/09/06 22:00:46.00 N2ZzCqNY0.net
>>272
参照カウンタは普通GCに含めないのでは?

292:デフォルトの名無しさん
18/09/06 22:02:22.60 itCyrIVk0.net
URLリンク(ja.wikipedia.org)参照カウント
こういう記事を見つけました。

293:デフォルトの名無しさん
18/09/06 22:04:19.65 itCyrIVk0.net
ホントお前ら人殺すことばっか考えてるよな。
そういうのは良いから初心者殺すのマジやめて。

294:デフォルトの名無しさん
18/09/06 22:04:41.28 vgkXomJH0.net
gcの一実装として参照カウンタ方式があるだけで、スマポはgcじゃない。

295:デフォルトの名無しさん
18/09/06 22:06:33.66 itCyrIVk0.net
それならそれでいいです。

296:デフォルトの名無しさん
18/09/06 23:18:28.17 8cSq8zHP0.net
>>288
横からでスマン�


297:ェ、他の初心者に偉そうに大嘘教えてるやつを初心者とは普通呼ばない 都合のいいときだけ初心者ヅラはだめよ



298:デフォルトの名無しさん
18/09/06 23:34:23.61 3bNAvGWPM.net
>>262
ありがとうございます
forの中で何回も関数呼び出すので前者が良さそうですね

299:デフォルトの名無しさん
18/09/06 23:34:43.07 itCyrIVk0.net
>>291
嘘の範囲を限定しないと俺大罪人じゃないですか。
まぁ、いいや。
メモリーエラーで落ちろ。

300:
18/09/06 23:34:53.93 N2ZzCqNY0.net
>>289
スマートポインターのうち std::shared_ptr は参照カウンタを内蔵しているのだから
①参照カウンタが GC、故に、std::shared_ptr も GC
②参照カウンタが GC でない、故に、std::shared_ptr は GC でない
①②のどちらかしかない
参照カウンタが GC なのにスマートポインタが GC でない、というのは矛盾しているのでは?
私は「参照カウンタは GC じゃない」と思う

301:デフォルトの名無しさん
18/09/06 23:48:27.91 8cSq8zHP0.net
>>293
>>251
もちろんインライン展開される場合は除く(展開されたら多分同じコードになると思うが
あと
>>255の質問に対して>>268は不適切、>>268から話が変な方向に行ってる
OpenCV使ってるって言ってるし、間違った使い方してリーク(>>255がnewしたのではない部分)
の可能性の方が高いと思うけどね

302:デフォルトの名無しさん
18/09/06 23:52:47.61 HW23dE280.net
>>294
なにも矛盾してないよ。
GCの一実装として参照カウント方式を使ったものがある。
スマホの中に参照カウントを使ったものがある。
だからといってGC=スマポじゃない。
エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒

303:
18/09/07 00:04:30.19 WaHB6+zk0.net
>>296
>エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒
is-a の話の例えに has-a の話を使うのは論理的ではありませんね
「車 has エンジン、飛行機 has エンジン」の話と「参照カウンタ is GC、スマポ is GC」の話は別ですよ

304:デフォルトの名無しさん
18/09/07 00:12:24.59 YR0a2VfT0.net
>>297
いやgc=参照カウンタなんて言ってないんだけど。
gcに参照カウント方式を使っているものがあるといってるの。はじめからhas_a関係しか言及してない。

305:
18/09/07 00:15:18.97 WaHB6+zk0.net
>>298
>いやgc=参照カウンタなんて言ってないんだけど。
そこに「=」記号を使うのがおかしいのでは?
真偽は別として、記号を使うのなら ⊂ とか ∈ じゃないですか?

306:はちみつ餃子
18/09/07 00:17:33.32 EL+7DMJm0.net
参照カウンタは GC だろ。

307:はちみつ餃子
18/09/07 00:22:54.57 EL+7DMJm0.net
>>266
元々の質問はどちらが速いかではない。

308:
18/09/07 00:53:47.67 WaHB6+zk0.net
>>300
では std::shared_ptr も GC でしょうか?

309:はちみつ餃子
18/09/07 01:28:57.33 EL+7DMJm0.net
>>302
私は std::shared_ptr を GC だと思ってるよ。
解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識だけど。
基準の妥当性はともかくとして、とにかく私はそういう基準で考えてる。
QZ 氏の中で std::shared_ptr と GC を隔てるのは何だと思ってるの?

310:デフォルトの名無しさん
18/09/07 02:17:04.39 obwFdGuS0.net
Qt5触ってみてるけど生ポインタばっか使ってて気持ち悪い、これでいいのか?

311:デフォルトの名無しさん
18/09/07 07:52:15.03 KDtg+GuV0.net
GC ⊇ shared_ptr

312:デフォルトの名無しさん
18/09/07 08:31:14.42 M/DU9wQ1M.net
>>304
生は触って気持ちいいものしかないよ

313:デフォルトの名無しさん
18/09/07 11:18:53.99 f8oqes6vH.net
parentクラスがあってそれを継承したchildクラスがあります。
vector<parent*> getParentlist(){//省略}でこんな感じでparentクラスのポインタのリストを返す関数があります。
それでここからが質問なのですが、
vector<child*> childList = (vector<child*>)getparentlist();
こういうコードがあってびっくりしています。
機能はしているみたいですがこれ作法的にオッケーなんでしょうか。
ダウンキャストは良くないと聞いていたりそもそもこれダウンキャストなのかとかちょっと分からないんです。
よろしくおねがいします。

314:デフォルトの名無しさん
18/09/07 11:20:41.99 /+XJI6DP0.net
>>281
話が通じてないなあ。。。
デストラクタでuse_count見てるのは当たり前だろ
シェアードポインタの話だぜ?
解放のタイミングがアプリのロジックに従属してるかどうかって話なのに
何を言い出すかと思えば

315:デフォルトの名無しさん
18/09/07 12:35:44.17 KEvh9jix0.net
>>307
試せる限りのコンパイラではそもそもコンパイルエラーだったけどなぁ
vector<parent *> &getParentlist();
じゃなくて??
その上で
(vector<child *> &)getParentlist();
なら通るよ、通るし普通に使えるはず

316:デフォルトの名無しさん
18/09/07 13:23:59.20 f8oqes6vH.net
>>309
失礼しました。ポインタ抜けてました
vector<parent*>* getParentlist(){//省略}

vector<child*>* childList = (vector<child*>*)getparentlist();
こんな感じです

317:デフォルトの名無しさん
18/09/07 13:38:44.48 KEvh9jix0.net
おいおい・・・w
ポインタでも同じことだ、そのキャストをreinterpret_castだと考えたらわかるはず
それでわからないならC++の継承の仕組みを勉強すべき

318:はちみつ餃子
18/09/07 16:38:51.51 EL+7DMJm0.net
基底方向へのキャストの実態は
サブオブジェクトまでのオフセット分だけアドレスをずらす操作なので、
>>310 のような場合にはそれは実現できない。
単に無理やり型を合わせているだけになってしまっている。
C++ 的にはあかんやつ。
ただ、実際に動いている理由をあえて考察するなら、
child が parent を単一継承した場合などには parent が child の先頭に配置されるようなメモリレイアウトにコンパイルされる可能性が高く、
アドレスをずらす量が 0 で済んでしまうので
型を読み替えるだけでも不整合が顕在化せずに動作してしまうということは有りうる。
あくまでも、処理系がやってることが偶然に組み合わさって動いているというだけなので、やめといた方がよい。

319:デフォルトの名無しさん
18/09/07 17:46:14.93 KEvh9jix0.net
そこまでご丁寧に説明してやるのなら、「Cスタイルのキャストは使うな」、を教えるべきじゃねーの?

320:デフォルトの名無しさん
18/09/07 18:34:49.58 mMEjLB3K0.net
parent * が child * なのかも分からないのに強引にキャストするのか
そこまで型無視するなら void * でいいんじゃない 知らんけど

321:はちみつ餃子
18/09/07 20:57:02.69 EL+7DMJm0.net
>>313
せやな。

322:はちみつ餃子
18/09/07 20:57:32.70 EL+7DMJm0.net
C++ スタイルのキャストを、特に入門者の内は static_cast だけ使っておけばまあまあ大丈夫。
static_cast でエラーになるような変換は C++ 的にはだいたいイケてないやつ。

323:デフォルトの名無しさん
18/09/07 20:59:50.93 /+XJI6DP0.net
アホか
dynamic_castが使えないくせに初心者皆伝なんぞやれん

324:
18/09/07 22:12:33.50 WaHB6+zk0.net
>>303
>私は std::shared_ptr を GC だと思ってるよ。
…GC発祥の地 lisp の使い手のはちみつさんがそうおっしゃるのなら、私の中の定義も書き換えないといけませんね
mark and sweep GC って、プログラム本体とは関係のないところで、それこそメモリの死にビットをも使ったりして、ごそごそやる、というイメージがあります
>解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識
>std::shared_ptr と GC を隔てるのは何
「解放のタイミングを図る機構が表のプログラムとは独立している」
くらいでしょうか?表のプログラムからの参照が途切れることと free() されることに直接の関係性がない mark and sweep とその発展型のみを GC とみなしています
といって、GC の本は一冊しか持っていません

325:デフォルトの名無しさん
18/09/07 22:36:10.40 OXR/kEGJ0.net
は○ち○餃子はLisperか
言語選びは慎重にな!
URLリンク(postd.cc)

326:はちみつ餃子
18/09/07 22:37:40.84 EL+7DMJm0.net
>>318
定義がひとつでなきゃならないとは思ってないよ。
だから自分なりに一貫した考え方があるのなら、それはそれでいいんじゃないかな。
ただ、「表の機構と分離されているか」という考え方だと、それは抽象化の仕方であって、メカニズム (アルゴリズム) の基準ではないね。
その基準だと std::shared_ptr が GC ではないとは言えても参照カウンタが GC ではないとは言えない。

327:デフォルトの名無しさん
18/09/07 22:45:54.86 Gz5E8uWmd.net
お返事遅れました>>213です
Overlappedの設定をCreateNamedPipe時点に引数として渡す構造体ことで同期制御を実現できました
ありがとうございました
メモリリーク探しきつい....

328:デフォルトの名無しさん
18/09/07 22:58:55.32 nLV7kBrTa.net
すみません質問があります
メインスレッドと通信スレッドがいて、
通信スレッドはメインスレッドのオブジェクトポインタ持ってます
メインスレッドはクラス化されており、スレッド用のstatic関数以外にもメンバ関数を持っています
通信スレッドがデータ受信して、メインスレッドの別のメンバ関数を呼び出した時、
メインスレッドで実行していた処理はどうなるのでしょうか?
メインスレッドで実行していた処理はあくまでもstaticな関数の処理で、staticでない他のメンバ関数は別に処理されるのでしょうか?

329:はちみつ餃子
18/09/07 23:04:25.63 EL+7DMJm0.net
>>322
説明が分かり難いなぁ。
通信スレッドとやらから呼び出した関数は通信スレッド上で走っているし、
メインスレッドはメインスレッドで走っている。

330:デフォルトの名無しさん
18/09/07 23:21:53.12 nLV7kBrTa.net
>>323
分かりずらくて申し訳ありません..
もし通信スレッドで呼び出した別のメンバ関数内でメンバ変数を変更した場合、
メインスレッドでもメンバ変数の変更値を参照できるのでしょうか

331:デフォルトの名無しさん
18/09/07 23:22:52.89 RvuhpJx80.net
スレッドとメモリの関係がよく分かってないようだ

332:デフォルトの名無しさん
18/09/07 23:23:07.46 OXR/kEGJ0.net
微妙な質問キタ

333:デフォルトの名無しさん
18/09/07 23:23:45.59 KDtg+GuV0.net
解放のタイミングがコンパイル時に確定しないのは shared_ptr でも同じでしょ。
任意のshared_ptrインスタンスを別のインスタンスにコピーした場合、解放のタイミングはコンパイル時に確定できない。

334:デフォルトの名無しさん
18/09/07 23:25:23.60 RvuhpJx80.net
vectorがconstexpr対応できるならshared_ptrもできそう

335:デフォルトの名無しさん
18/09/07 23:26:09.70 B/yxkRYZ0.net
staticなメンバ関数ではstaticなメンバ変数しか参照できない
staticでないメンバ関数はstaticな変数もstaticでない変数も参照できる
staticなメンバ関数とstaticでないメンバ関数が作用しあうのであれば、
当然staticな変数になる
はっきりいってな
staticな変数はグローバル変数と同じだからな
とうぜん同じ実体の変数を参照することになる

336:デフォルトの名無しさん
18/09/07 23:26:58.48 OXR/kEGJ0.net
>>329は視野が広い人じゃなかったのか!?

337:デフォルトの名無しさん
18/09/07 23:29:06.23


338: ID:B/yxkRYZ0.net



339:デフォルトの名無しさん
18/09/07 23:35:54.69 OXR/kEGJ0.net
こりゃーもう>>324には>>331に回答してもらうしか

340:はちみつ餃子
18/09/07 23:38:50.05 EL+7DMJm0.net
>>324
出来るが、データ競合が起こらないように気を付けよう。

341:はちみつ餃子
18/09/07 23:41:24.38 EL+7DMJm0.net
質問者が状況を理解してない説明をしてるから本当に回答になってるのかイマイチわからぬ。
無理に言葉にしようとせずにコードを示してくれた方がいいんだがなぁ。

342:デフォルトの名無しさん
18/09/07 23:41:30.87 B/yxkRYZ0.net
バカじゃなければ
普通にアドレスが固定されてるstaticなメンバ関数のアドレスを
スレッドを開始させるアドレスにしてると推定できるからな

343:デフォルトの名無しさん
18/09/07 23:46:20.44 B/yxkRYZ0.net
このスレのバカどもはスレッドなんか
なんも分かってないからな
質問するヤツもバカになにを聞いてもムダだからな
そこの理解は必要

344:デフォルトの名無しさん
18/09/07 23:56:01.03 OXR/kEGJ0.net
>>335
>スレッドを開始させるアドレス
さすあに
スレッドを起こす質問に解釈しやがった;;
>>322
>メインスレッドはクラス化されており
>通信スレッドはメインスレッドのオブジェクトポインタ持ってます
と、>>324
>メインスレッドでもメンバ変数の変更値を参照できるのでしょうか
からすると通信スレッドで変更したメモリをメインスレッドでも参照できるのかという質問かとオモタわ;;;

345:デフォルトの名無しさん
18/09/07 23:58:34.82 B/yxkRYZ0.net
> 通信スレッドはメインスレッドのオブジェクトポインタ持ってます
まず一番最初に書いてることが読めてない
致命的な頭のワルサといっていい

346:デフォルトの名無しさん
18/09/08 00:00:18.18 j/6nk0eH0.net
普通にメインスレッドのメンバ関数呼び出して
メインスレッドのメンバ変数を変更すると読めるからな
こんだけコミュニケーションレベルが低いと
実生活でも支障があるレベルといっていい

347:デフォルトの名無しさん
18/09/08 00:03:28.41 VqyCCBP80.net
>>330
半角クンは自分の見たいものしか見えない、すなわち常に半角クンの中ではすべてのものを見通している視野100%ということなのだろう

348:デフォルトの名無しさん
18/09/08 00:04:14.21 49ssh0n4a.net
>>333
mutexしときます
いろいろアドバイスありがとうございます
>>329ですね

349:デフォルトの名無しさん
18/09/08 00:06:40.10 j/6nk0eH0.net
まずなこのスレの低学歴知恵遅れたちは
自分たちがどんだけ低学歴知恵遅れかという自覚がない
致命的といっていい

350:デフォルトの名無しさん
18/09/08 00:18:54.01 6MRSNGru0.net
低学歴知恵遅れなので質問の解釈に関する>>337>>339の違いがわからんが、
それはそうとして、当初の疑問に戻るが視野の広い>>342
>とうぜん同じ実体の変数を参照することになる
には一切注釈をつけなくて良かったの?

351:デフォルトの名無しさん
18/09/08 00:20:24.81 j/6nk0eH0.net
また低学歴知恵遅れが負け惜しみ意味不明なこといってるしな
低学歴知恵遅れの負けず嫌いは異常だからな

352:デフォルトの名無しさん
18/09/08 00:22:38.67 j/6nk0eH0.net
低学歴知恵遅れほど自尊心だけは高い
コレは底辺に多い
そして自分がゴミクズの低学歴知恵遅れである自覚もない
つまり救いようがない

353:デフォルトの名無しさん
18/09/08 00:30:51.48 j/6nk0eH0.net
低学歴知恵遅れの底辺ゴミクズほど自己評価だけは高い
その根拠のない自己評価の高さは
どこからくるものなかははっきりとは分からない
低学歴知恵遅れの底辺ゴミクズほどそういう傾向がある
それは経験からかなり相関が高いと確信している

354:
18/09/08 00:31:21.19 t7GfMYxV0.net
みなさん厳しいですね…
私は質問側ですが、そして今 schme スレで質問を丸投げしちゃっていますが、わからないときは、なにがわからないかわからない、という感じだったりしています
>>324
なにか断片的でいいからコード例をあげていただくと嬉しいです、例えば URLリンク(ideone.com)

355:デフォルトの名無しさん
18/09/08 00:45:27.68 j/6nk0eH0.net
むしろこのスレの低学歴知恵遅れの底辺ゴミクズたちは
質問してるヤツのレベルにすら到達してない


356:



357:デフォルトの名無しさん
18/09/08 00:46:44.54 49ssh0n4a.net
>>347
pthread使ってる以外はほぼ同等な考え方です
実例作っていただきありがとうございます。

358:デフォルトの名無しさん
18/09/08 01:03:30.65 6MRSNGru0.net
>>326で書いたとおりスレッドAで変更したメモリをスレッドBで正しく参照できるのか否かというのは
微妙な問題なんじゃ
>>347のコードでf::nの書き換えと参照が正しく動くのは
20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たしたに過ぎないかもしれん
(中でmutexとかcritical sectionとかなシステムコールを呼んでいるなら普通のOSならメモリバリアが効く
と自尊心だけは高い低学歴知恵遅れなので難癖をつけておく
実証はしない

359:デフォルトの名無しさん
18/09/08 01:10:28.57 6MRSNGru0.net
>>347のコードがそもそもC::nがvolatile宣言されていないのに安全に動いている理由は…
と始めると荒れる…!
それはともかくスレッド間のメモリの読み書きを>>341のmutexでガードするというのは大変良い心がけです
多少遅いかもしれないが遵守する限り泥沼に踏み込まずに済む

360:デフォルトの名無しさん
18/09/08 01:32:58.78 LCjnyCTn0.net
>>322
メインスレッドとサブスレッドで並列に起動して同じ変数を書き換えた場合、書き換えレースになる。
ロックっていう機構があるのでそれを参照。

361:
18/09/08 01:41:37.02 t7GfMYxV0.net
>>351
よろしければ教えていただけますか?
>20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たした
メモリバリアって要するに x86 の lfence, sfence, mfence のことですか?
これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?

362:デフォルトの名無しさん
18/09/08 02:36:49.43 6MRSNGru0.net
>>353
>これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
ちげう
実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
キャッシュのinvalidateやfillが起きるかどうかとは別の話(結果的に起きることもあるが常にではない
キャッシュと関係あるみたいな説明のページがあることは承知しているが苦情は漏れに言わないでホスイ
>これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?
古代の話は知らん
OoO(アウトオブオーダー実行)はすでにあったはずなので、ライトコマンドキューやリードコマンドキューもすでにあった
全くの推測だが、キャッシュのinvalidate操作が(invalidateを常に伴うため効率の悪い)メモリバリアと同じ効果があったとかではないかいや知らんけど

363:デフォルトの名無しさん
18/09/08 02:52:26.13 6MRSNGru0.net
ちなIA(Intel Architecture)のうちでも常識的なコア数のやつは
コア間のキャッシュコヒーレンシをハードウェアで勝手に取ってくれるので、
コア間のメモリ参照の不整合はメモリバリアだけ注意したら逝ける(キャッシュの存在は透過的

364:はちみつ餃子
18/09/08 02:58:07.14 VmsJpbI+0.net
>>353
こないだ atomic を使ってたけど、
atomic について調べたならそこらへんの話もどこかに書いてなかったか?
C++ 用語ではバリアでなくてフェンスって言ってるけど。

365:デフォルトの名無しさん
18/09/08 03:04:22.19 RizVmglH0.net
メメリバリアやフェンスの意味を知るにはcpuのメモリモデルの理解が必要
URLリンク(yohhoy.hatenablog.jp)

366:
18/09/08 03:04:32.58 t7GfMYxV0.net
>>354
>実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
>キャッシュのinvalidateやfillが起きるかどうかとは別の話(結果的に起きることもあるが常にではない
なるほど…ちょっとだけ理解が進んだかもしれません
「はるか遠くにあるメインメモリに変更が反映されるか


367:どうか」はプログラムの書き手にはあまり関係がなく、 「各コアから見る限りにおいて、各コアが発したライトあるいはリードの結果すべてが反映され、各コアからはみえている」と考えればいいのですね これらのメモリの可視性について http://www.cs.tsukuba.ac.jp/~yas/cs/csys-2013/2013-10-15/ 等を熟考しています mutex や cond にその方面での効用があるとは…、pthread のメモリ可視性に関する効果はあまり意識していませんでした 重要なヒントをくださりありがとうございます



368:
18/09/08 03:17:34.12 t7GfMYxV0.net
>>356
ええ、atomic に関係する話をいろいろと読んではいたのですが、正直なところ、あまりよくわからなかったことを告白します
acquire とか release とか、いまひとつイメージできなかった…
atomic の各メンバ関数の memory_order は C++デフォルト引数として sequence-consist(ency) を与えていることはわかりましたので「最強にしているから、まあいいか」くらいですましていました
>>354
>実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
この記述が一番しっくりきました

369:
18/09/08 04:20:01.69 t7GfMYxV0.net
>>352
>書き換えレース
ええと、これを読んで reset-set flip-flop の禁止入力「R=S=1」のことを思い出してしまったんですが、それはさておき
複数のコアが同一メモリに対して「同時に書き込み」する、というのは、このフリップフロップ禁止入力と同じ意味あいですか?
つまり「どっちの書き込みが後になるか、予想がつかないから禁止」…①
それとも、「複数のコアが本当に同時に書き込んでしまった場合、結果が不定になる」…②
(昔のフロッピーディスク供給のソフトウェアプロテクトの方法としての「コロコロビット」=読み出すたびに 0/1 が変わる)という意味なのか
いや、①も②も同じような意味なのかもしれませんが、
>>215 の「CAS 連続スピンロックや CAS 連続スピンロック中に別コアから書き込んだり読み込んだりすること」
が②の意味で危険で、ソフトウェア側で mutex や dirty-bit (>>238) を設けて本当に意図的にコントロールしなければならないのか、と、ちょっと心配になりました
最初から安全側にふっておくとは思いますが

370:デフォルトの名無しさん
18/09/08 08:05:39.39 RizVmglH0.net
考える前に学んだ方がいい
cas が使い物にならないならなぜそんな物があると思う?
というか mutex の実装にも cas は使用される。
使い方がわからないからcasは使わず mutex を使うという判断は正しいが、
例えば前の例のエラトステネスの篩で実装1ビットセットする毎に
mutex で排他していたらコアがかなり沢山あってもシングルスレッドの方が速い
(mutex api を処理する時間が大半を占めてしまう)

371:デフォルトの名無しさん
18/09/08 08:13:01.68 RizVmglH0.net
質問する前にスレッドセーフとか排他制御とかレースコンディションとか
弱いメモリモデルとかでググって時間くらいしっかり読んで

372:デフォルトの名無しさん
18/09/08 08:13:34.47 RizVmglH0.net
>時間くらい
「1時間くらい」のタイプミスでした。

373:デフォルトの名無しさん
18/09/08 11:49:10.23 +e2Zk2SC0.net
>>360
cpuのメモリモデルの説明読んだら最初の方に書いてあると思うけど
普通ワード単位のアクセスは何もしなくてもハード的にアトミックであることが保証されてる
そこで壊れたらやってられないからな

374:デフォルトの名無しさん
18/09/08 13:52:50.37 UCzuGyPmM.net
>>360
> つまり「どっちの書き込みが後になるか、予想がつかないから禁止」…①
順序は予測できないと言うのは正しい
> それとも、「複数のコアが本当に同時に書き込んでしまった場合、結果が不定になる」…②
通常


375:のプロセッサならこれはない 排他制御がなされていてどちらかの結果が最終的に反映される ただ CAS (Compare And Swap) 命令はそう言う話じゃなくて読出動作 (Compare) と書込動作 (Swap) がアトミック(つまりその間には他のアクセスは無いように制御されてる)ってこと ソフトでどうのこうのできる話じゃないからシステムから提供されてるAPIを素直に使いなさい >>364 中途半端な知識で語るなよ



376:デフォルトの名無しさん
18/09/08 16:38:24.58 +lRq1NsW0.net
>>364
だよな
同一のCS, WE/OEをファンアウトさせるわけで
配線遅延があってもクロック同期で関係なくなるし

377:デフォルトの名無しさん
18/09/08 20:07:53.81 6MRSNGru0.net
このスレは荒れる…!
マルチスレッド、マルチコア、アウトオブオーダー実行(OoO)にまつわる3つの問題は分けて考えられねばならない;
 (A) 書き換えレースの問題(>>352
 (B) アドレスxに対する読み書きのatomic性(>>364
 (C) メモリバリア(>>354
(A)はマルチスレッドすればシングルCPUでも起きる問題
(B)はこれは何ビット幅までの読み書きを他コアが割り込み不可能なバスサイクルで行えるかという話。マルチコア固有
(C)はマルチコア状況化でのアウトオブオーダー(OoO)実行の影響をソフトで制御して無問題にするテクの話で、マルチコア×OoO固有の話
>>364は(B)のことを言っており、だいたい合っているんじゃ
(IAの場合、4バイト境界に整列した32ビットまでは(B)の意味でatomicに読み書きできる
 整列していないデータの読み書きは16 bitであっても(B)の意味でatomicではない
 インテルのマニュアルに書いてある
 自尊心だけは高い低学歴知恵遅れなのでいちいちソースは示さないが

378:デフォルトの名無しさん
18/09/08 20:29:14.34 6MRSNGru0.net
とはいえ、読み書きをミューテックスなりロックなりでガードする、…(D)
これだけを遵守すれば>>367の問題は全部忘れて良い(>>351の後段にも書いた)
メモリモデルとかまともに勉強する必要は無い
さらに言うと、まともなコンパイラなら(中でどんな副作用やメモリバリアを行うかわからない)システムコールを跨いだ
変数のレジスタ割り当てとかしないから、(D)を守れば実際のところ(ほとんどのケースで)volatileも要らん
メモリモデルを勉強する必要があるのは、(D)の速度に不満が生じて改善する必要に迫られたとき、
例えばdouble-checked lockingテクがちゃんと動くのかとか不安になったりロックレスハッシュを作らねばならなくなったときだけ!

379:デフォルトの名無しさん
18/09/08 22:09:03.01 Mc6Ny40VM.net
>>367
マルチプロセッサとかNUMAの事は考慮しなくても良いのけ?

380:デフォルトの名無しさん
18/09/08 23:30:32.50 ZUEeKRTR0.net
バスサイクルと言ったりミューテックスって言ったり話のレベルがぐちゃぐちゃすぎる…

381:デフォルトの名無しさん
18/09/09 01:33:18.67 XJaXrhZ00.net
なんせC++は生ポが使える低水準言語ですし・・・

382:デフォルトの名無しさん
18/09/09 03:24:55.55 Q3MV1FJL0.net
要するにあらゆる左辺値をatomicにして更にミューテックスでガードしとけば(これはキチガイ)
ハード系の知識を学ぶ必要はない(ハードソフトという名の蛸壺)という無茶苦茶な主張だな
勉強嫌いにもほどがあるだろ、何が低学歴だ

383:デフォルトの名無しさん
18/09/09 08:36:42.55 BqWnELncM.net
周辺チップからのメモリ書換をミューテックスでガード出来るのか

384:デフォルトの名無しさん
18/09/09 08:59:15.50 9h0HyZsY0.net
実際プログラミングする上でハードの知識はいらんだろ

385:デフォルトの名無しさん
18/09/09 09:25:43.25 BqWnELncM.net
ハードの知識無しでデバドラ書けるのけ?

386:デフォルトの名無しさん
18/09/09 10:19:49.00 Q3MV1FJL0.net
>>374
メモリのゴーストとか普通に出てくるだろ
PCという狭い牧場から出たことのない家畜は知らんだろうけど

387:デフォルトの名無しさん
18/09/09 10:31:54.13 9h0HyZsY0.net
>>375
は?プログラミングが書けると言っただけでデバドラのプログラミングするなんて言ってねえよ
じゃあお前は信号処理を知らずに音声合成のプログラミング書けるのか?
>>376
だからそんなの考慮知らなくもソフトウェアは作れるんですが

388:デフォルトの名無しさん
18/09/09 10:37:46.17 kQslwDxe0.net
作文したら推敲しろ、って小学校で習うはずなんだけどな

389:デフォルトの名無しさん
18/09/09 10:39:04.08 9h0HyZsY0.net
>>378
え?
お金も払われないのに推敲?
時間の無駄じゃん

390:デフォルトの名無しさん
18/09/09 11:01:35.79 Q3MV1FJL0.net
>>377
ああ家畜か
人間よばわりして悪かったな

391:デフォルトの名無しさん
18/09/09 11:25:28.91 lGJ+2GvF0.net
ハードウェア部分を隠すためのOSによるアクセスの抽象化とか、
標準ライブラリがあるわけだし、ハードウェアの知識が絶対に必要でもないでしょ。
デバイスドライバを書くプログラマが優れているとか、その反対に
高レベルな(抽象度の高い)ソフトを作る人ほど偉いってものでもない。

392:デフォルトの名無しさん
18/09/09 11:26:29.90 l6rR/pccM.net
>>380
逆に家畜はお前じゃね?
ハードウェアを意識しないとプログラミング出来ないなんて可哀相

393:デフォルトの名無しさん
18/09/09 14:43:15.61 TxROatu90.net
何これ?

394:デフォルトの名無しさん
18/09/09 15:02:39.54 //bKOaXP0.net
いつものマウントごっこだろ

395:デフォルトの名無しさん
18/09/09 16:27:56.67 TAQT5wBea.net
for i in {0..15}; do
mount /dev/dm-$i /mnt
done

396:デフォルトの名無しさん
18/09/09 17:06:11.77 V1LakR3i0.net
捕食される側の人類最底辺同士で争ってる

397:デフォルトの名無しさん
18/09/09 17:19:50.37 xES8AK750.net
低レベルプログラミングって言う面白そうな本が出てたなあ

398:デフォルトの名無しさん
18/09/09 18:06:25.87 acpzPeVw0.net
そういえば、さいきんの低レベルいじる時ってどうするんやろね。
BIOSなくなってきてるし、作法かわってきてるのかなぁ・・・。

399:デフォルトの名無しさん
18/09/09 18:53:37.14 +aTtRZce0.net
古き良きシリアルポートが普通のPCではほぼ絶滅してるからなあ
USBきらい

400:デフォルトの名無しさん
18/09/09 19:01:40.42 acpzPeVw0.net
USB制御のノウハウってあんまり周知されてない感じがする。

401:デフォルトの名無しさん
18/09/09 19:09:08.66 Q3MV1FJL0.net
アイソクロナス?

402:デフォルトの名無しさん
18/09/09 19:38:22.19 eYgKQZDEM.net
>>382
高級ってのを誤解しているアホがここにもいたわw

403:デフォルトの名無しさん
18/09/09 21:21:28.72 TxROatu90.net
>>390
LINE EYEで見てるとエラー出まくったりしてるね

404:デフォルトの名無しさん
18/09/10 22:46:19.98 IGaBABI/d.net
dllからexeをCreateProcessで起動するとメモリリークするとかある?
debugging tool forなんたらみたいなやつでメモリリークチェックしてるのだけど
exeから呼んだやつはリークなし
dllから呼んだやつはリークありとなっている
監視開始ポイントと終了ポイント及び呼び出しソースコードに差分がなく
その他にも差分がないんだ

405:デフォルトの名無しさん
18/09/10 23:03:06.10 XzQQxj6r0.net
dllから呼びだす場合
dllは呼びだした側のプロセスと同じアドレス空間にマッピングされ
dll側の関数を呼び出して生成されたヒープも
呼びだした側のプロセスと同じアドレス空間にマッピングされる
プロセスから呼び出した場合、
呼び出した側のプロセスと関係ない呼び出された側のプロセスのアドレス空間に
ヒープは生成されるから
呼び出した側のプロセスを監視してもそのリークについて検出されることはない
分かった?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch