C言語の話題のみ取り扱います。C++の話題はC++スレへ。
上級者専用です。10,000行程度のソースを扱えない人は以下スレへ。
C言語なら俺に聞け
https://mevius.5ch.net/test/read.cgi/tech/1519046038/
適宜以下を使用してください。
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C言語相談室(上級者専用)
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 139f-Cjmv)
2018/03/02(金) 22:48:03.65ID:2Cs+DkMh013デフォルトの名無しさん (ワッチョイ 4d9f-Npnk)
2018/03/17(土) 20:14:25.06ID:l8GUgwob0 >>12
その指摘は当たっている。
上級者がわざわざ質問する事はほぼ無い。当然流れない。
でも俺はそれでもいいと思っているんだよ。
上級者が集える場所がある事が重要。
何であれ、人数は初心者>>>中級者>>>上級者だから、
Web上のあらゆる場所は初心者で埋め尽くされてる。
例のコピペ「コミュニティの一生」で言えば、上級者は常に迫害される側だ。
だからこそ俺は上級者用の場所を確保しておきたい。
歴史的経緯から、上級者が人数的に一番多いのはCだと思うし、まずはお試しだ。
回答者の人数も揃っているし、俺はちょっと俯瞰しようと思っている。
C言語スレ、元々は見るからに年齢層が高かったのだが、
ここに来てド初心者が押し寄せてるのは何なんだ?春休みが理由とも思えないし。
あとやっぱり、話題になっているのは例外だけど、
あれって結局の所、今現在他言語でもいい解を見つけられてないよな?
Goは一周回ってCっぽくなってるし、
C++の「例外安全も型に含める」ってのもC++っぽいやり方だが、
相変わらず「そこまでやるか?」だし。
その指摘は当たっている。
上級者がわざわざ質問する事はほぼ無い。当然流れない。
でも俺はそれでもいいと思っているんだよ。
上級者が集える場所がある事が重要。
何であれ、人数は初心者>>>中級者>>>上級者だから、
Web上のあらゆる場所は初心者で埋め尽くされてる。
例のコピペ「コミュニティの一生」で言えば、上級者は常に迫害される側だ。
だからこそ俺は上級者用の場所を確保しておきたい。
歴史的経緯から、上級者が人数的に一番多いのはCだと思うし、まずはお試しだ。
回答者の人数も揃っているし、俺はちょっと俯瞰しようと思っている。
C言語スレ、元々は見るからに年齢層が高かったのだが、
ここに来てド初心者が押し寄せてるのは何なんだ?春休みが理由とも思えないし。
あとやっぱり、話題になっているのは例外だけど、
あれって結局の所、今現在他言語でもいい解を見つけられてないよな?
Goは一周回ってCっぽくなってるし、
C++の「例外安全も型に含める」ってのもC++っぽいやり方だが、
相変わらず「そこまでやるか?」だし。
15片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)
2018/03/17(土) 20:23:13.35ID:6umCop+Md プログラミングは実装の手段に過ぎない。それは問題解決、「ソリューション」でなければならない。
プログラミングが複雑になるほど、全体を俯瞰する視点や、問題解決するための理論や設計が重要になる。
あなたは、C言語で何の問題を解決するのか。
プログラミングが複雑になるほど、全体を俯瞰する視点や、問題解決するための理論や設計が重要になる。
あなたは、C言語で何の問題を解決するのか。
16片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)
2018/03/17(土) 20:25:46.92ID:6umCop+Md というわけで、、、みんなで、C言語で実現できることを考えてみよう。。。
17片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)
2018/03/17(土) 20:33:08.59ID:6umCop+Md マイクロソフト関係者がChecked Cなるものを作っている。セキュリティが向上するらしい。#includeの代わりにコードをモジュールで管理するようだ。
18デフォルトの名無しさん (ワッチョイ 4d9f-Npnk)
2018/03/17(土) 20:40:36.67ID:l8GUgwob0 >>16
ちなみに俺はそれは逆だと思っている。
他言語で出来ることは他言語で、CでしかできないことをCで、だ。
スクリプト言語は本当に色々楽なんだよ。だから俺はJavaScriptが気に入っている。
例えば、以前出ていたオセロの盤面とかも、
多分20-30行で割り込みハンドラ含めて用意できる。
勿論ブラウザに乗っているからだが、Cではこの量では無理だ。
https://mevius.5ch.net/test/read.cgi/tech/1519046038/211
だからアプリ全体やGUI(=速度が要らない)をCで組むのはただの馬鹿で、
速度的に問題がある部分だけCのDLLを呼ぶ方向にソフトウェア全体がなっていくのではないかと思っている。
cythonやNumPyとかがまさにそうだが。
ちなみに俺はそれは逆だと思っている。
他言語で出来ることは他言語で、CでしかできないことをCで、だ。
スクリプト言語は本当に色々楽なんだよ。だから俺はJavaScriptが気に入っている。
例えば、以前出ていたオセロの盤面とかも、
多分20-30行で割り込みハンドラ含めて用意できる。
勿論ブラウザに乗っているからだが、Cではこの量では無理だ。
https://mevius.5ch.net/test/read.cgi/tech/1519046038/211
だからアプリ全体やGUI(=速度が要らない)をCで組むのはただの馬鹿で、
速度的に問題がある部分だけCのDLLを呼ぶ方向にソフトウェア全体がなっていくのではないかと思っている。
cythonやNumPyとかがまさにそうだが。
19デフォルトの名無しさん (ワッチョイ 4d9f-Npnk)
2018/03/17(土) 20:47:39.89ID:l8GUgwob020片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)
2018/03/17(土) 21:54:17.01ID:6umCop+Md 文章を単語に分け、文字に分け、それをラティス(lattice)、網目構造にする。それのn-gramと意味構造と発音記号とアクセントと音声データを結び付け、
深層学習を真似て関係性をマッピングする。それで、word2vecみたいなことができないだろうか。
深層学習を真似て関係性をマッピングする。それで、word2vecみたいなことができないだろうか。
21片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF)
2018/03/17(土) 21:56:53.09ID:6umCop+Md word2vecよりも優れた成果を求めている。ここに機械学習の理論家は居ないだろうか。
22デフォルトの名無しさん (ワッチョイ e19f-hKdO)
2018/03/17(土) 22:21:56.06ID:/yJWANaR0 >>16
それは発想が逆なのでは?何かを解決する道具の内の一つとしてプログラミング言語が作られているわけだから。
それは発想が逆なのでは?何かを解決する道具の内の一つとしてプログラミング言語が作られているわけだから。
23デフォルトの名無しさん (ワッチョイ 459e-Ue6H)
2018/03/19(月) 22:59:10.03ID:R1Gqx9A70 片山博文って、ググって最上位に来る人?
本物?
本物?
24デフォルトの名無しさん (ワッチョイ e19f-hKdO)
2018/03/20(火) 02:37:08.41ID:PXcTmg8I0 ここの中の人か
http://katahiromz.web.fc2.com/
http://katahiromz.web.fc2.com/
25デフォルトの名無しさん (ワッチョイ cb9e-Ue6H)
2018/03/20(火) 20:53:25.44ID:k7gB50HA027デフォルトの名無しさん (ワッチョイ 7312-Npnk)
2018/03/21(水) 09:30:04.70ID:qwFXdNpt0 shift+右クリックはやっぱりめんどくせーの?
28デフォルトの名無しさん (ブーイモ MM26-Z/eb)
2018/03/26(月) 07:53:47.49ID:F4vKabPYM29デフォルトの名無しさん (ワッチョイ 9a33-fzSc)
2018/03/26(月) 09:20:39.77ID:jNg5MzcL0 N1570 と整合する。
30片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-OUTG)
2018/03/26(月) 16:07:25.48ID:42MV7MT1d >>27
最近のWin10のは、コマンドプロンプトじゃなくてPowerShellになるらしい。
最近のWin10のは、コマンドプロンプトじゃなくてPowerShellになるらしい。
31デフォルトの名無しさん (ワッチョイ a39f-aRf7)
2018/03/26(月) 23:15:54.45ID:dq/Lcz74032デフォルトの名無しさん (ワッチョイ b39f-9jjH)
2018/04/20(金) 23:17:01.07ID:c2Z2eqef0 あれ?そういえばこのスレ、過疎ってね?
33デフォルトの名無しさん (ワッチョイ 239f-/G6U)
2018/04/20(金) 23:46:35.26ID:sdtFgYaG0 上級者が初心者/中級者と比べて圧倒的に少ないのは自明だし、過疎るのは仕様。
34デフォルトの名無しさん (ワッチョイ b39f-9jjH)
2018/04/21(土) 00:30:37.73ID:Oxipuy330 てか、どの程度からを上級者と言っていいのか決まっているわけでもないし、
そもそもそういう人がこのスレを見に来るとは限らず、また見ても何かを書きたいと
思うとは限らない。
そもそもそういう人がこのスレを見に来るとは限らず、また見ても何かを書きたいと
思うとは限らない。
35デフォルトの名無しさん (ワッチョイ 239f-/G6U)
2018/04/21(土) 00:52:21.32ID:2gRYaRc50 で?
36デフォルトの名無しさん
2018/04/21(土) 02:29:14.56 こんなところで相談する時点で上級者じゃないしw
37デフォルトの名無しさん (ワッチョイ 239f-/G6U)
2018/04/21(土) 09:05:28.55ID:2gRYaRc5038デフォルトの名無しさん (ワッチョイ 1723-8E8L)
2018/04/21(土) 16:33:14.08ID:Zke6MJB80 老人ホーム
39片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-gnn3)
2018/04/21(土) 16:41:37.10ID:9EumPI9yd 雪ホーム
40デフォルトの名無しさん (ワッチョイ 2323-8E8L)
2018/04/21(土) 16:57:32.96ID:V+d3uri50 お達者クラブ
41デフォルトの名無しさん (ワッチョイ d164-RHBj)
2018/05/02(水) 04:40:30.63ID:bwD+G84h0 Cのnull安全がRustだと聞いたがRustはそもそもC++の後継であってCは念頭に置いてないと思うんだが
詭弁かな。
詭弁かな。
42デフォルトの名無しさん (ワッチョイ ab9f-UR45)
2018/05/03(木) 00:23:25.54ID:ZDR22COS0 そりゃ認識を間違ってるだろ。
https://techacademy.jp/magazine/8735
https://www.tiobe.com/tiobe-index/
C++erはCの後継はC++だと思っているし、俺もそうだと勘違いしていたが、
実際はCとC++は別枠で扱われていることが多いし、その方が妥当だ。
今のスマポ(キリッなC++とCは別物だ。
文法的な点については、全言語の半分くらいはC後継だし。
C->ObjectiveC->swiftこそが正統Cの系統だ!と彼らが考えていても不思議ではないし。
Rustを触ったことはないが、通常議論されているのは、
・RustはCを代替できるか?
であり、「C++を代替できるか?」なんて言っている奴はいない。理由は、
・C++は現在も旺盛に進化中であり、後継を必要としてない(C++XXの後継はC++YY)
・C++ではCを代替できないのは確定済み(Linux等)
で、どうにかしたいのはあくまでCであり、C++ではないからだろ。
https://techacademy.jp/magazine/8735
https://www.tiobe.com/tiobe-index/
C++erはCの後継はC++だと思っているし、俺もそうだと勘違いしていたが、
実際はCとC++は別枠で扱われていることが多いし、その方が妥当だ。
今のスマポ(キリッなC++とCは別物だ。
文法的な点については、全言語の半分くらいはC後継だし。
C->ObjectiveC->swiftこそが正統Cの系統だ!と彼らが考えていても不思議ではないし。
Rustを触ったことはないが、通常議論されているのは、
・RustはCを代替できるか?
であり、「C++を代替できるか?」なんて言っている奴はいない。理由は、
・C++は現在も旺盛に進化中であり、後継を必要としてない(C++XXの後継はC++YY)
・C++ではCを代替できないのは確定済み(Linux等)
で、どうにかしたいのはあくまでCであり、C++ではないからだろ。
43デフォルトの名無しさん (スップ Sd4a-SJvk)
2018/05/03(木) 09:56:19.82ID:+ocIQVM3d 実装や機能を見る限りについてはRustはCよりC++に寄ってると思うよ
Cにこの抽象度の機能をもたせると必然的にそうなるという説はあるけども
何が言いたいかと言うと後継という立場について、そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、そのカバーしなかった領域を(C++に寄っている)Rustがカバーしたかと言われるとNoだと思っているからRustはCよりC++の後継という方が妥当に思えるという話
Cにこの抽象度の機能をもたせると必然的にそうなるという説はあるけども
何が言いたいかと言うと後継という立場について、そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、そのカバーしなかった領域を(C++に寄っている)Rustがカバーしたかと言われるとNoだと思っているからRustはCよりC++の後継という方が妥当に思えるという話
44デフォルトの名無しさん (ワッチョイ ab9f-UR45)
2018/05/03(木) 13:18:42.35ID:ZDR22COS0 申し訳ないが俺自身がRustを知らないのでつっこんだ議論は空回りしてしまうが。
> そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、
> Cの領域
これをどう捉えるからだよ。
少なくともC++の連中は「カバーしている」と思っている。
そしてLinusは「C++は全くのゴミだ」と思っている。
良くも悪しくも、Cはミニマムで美しく完成している。全く無駄がない。
そして各後継言語はこれに対して、「便利機能」を追加しようとしてきた。
C++は「クラス」「型検査」「例外」を導入した。
結果、CならCキャストやマクロですぱっと書けるところをグダグダとテンプレートを引き回したり、
或いは間接呼び出しでいちいち実行速度が遅くなったり、
はてまたスマポ(キリッでGCの再実装を盛大にやらかしている有様だ。
Linusの意見はごもっともだ。
Rustの謳い文句は、「実行速度」「ゼロコスト抽象化」等であり、
C++の失敗を見て学んでいることは明白だ。
だから、後継になろうとしている相手はCなんだよ。C++ではなくてね。
とはいえ、そちらの指摘の通り、実際の仕様がCよりもC++に近くなるのは必然だ。
普通にやれば、C++で成功したところはそれをもらって、
C++で失敗したところは新たな方法を提案して、となるだろうからね。
Rustはぱっと見、スマポがデフォで生ポは例外的使用か?
C++は歴史的経緯から「言語的には」生ポがデフォでスマポが追加されている。
これは、「『アプリケーション用の』プログラミング言語」としては間違いだ。(Linusもそう言っている)
結果、C++erは「デストラクタ」「スマポ」「=のオーバーロード]をこねくり回して苦労しているが、
本来はこれらは言語側で完全に隠蔽すべき物だ。(ユーザが書く必要なんてない)
そしてRustはそれをやり、結果的にnull安全なんだろ。
正しい方向への進化だよ。(分岐元がCかC++かは何とも言い難いが)
C++はアプリケーションの動作と関係ないところで無駄に苦労するでしょ。俺はあれが嫌い。
> そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、
> Cの領域
これをどう捉えるからだよ。
少なくともC++の連中は「カバーしている」と思っている。
そしてLinusは「C++は全くのゴミだ」と思っている。
良くも悪しくも、Cはミニマムで美しく完成している。全く無駄がない。
そして各後継言語はこれに対して、「便利機能」を追加しようとしてきた。
C++は「クラス」「型検査」「例外」を導入した。
結果、CならCキャストやマクロですぱっと書けるところをグダグダとテンプレートを引き回したり、
或いは間接呼び出しでいちいち実行速度が遅くなったり、
はてまたスマポ(キリッでGCの再実装を盛大にやらかしている有様だ。
Linusの意見はごもっともだ。
Rustの謳い文句は、「実行速度」「ゼロコスト抽象化」等であり、
C++の失敗を見て学んでいることは明白だ。
だから、後継になろうとしている相手はCなんだよ。C++ではなくてね。
とはいえ、そちらの指摘の通り、実際の仕様がCよりもC++に近くなるのは必然だ。
普通にやれば、C++で成功したところはそれをもらって、
C++で失敗したところは新たな方法を提案して、となるだろうからね。
Rustはぱっと見、スマポがデフォで生ポは例外的使用か?
C++は歴史的経緯から「言語的には」生ポがデフォでスマポが追加されている。
これは、「『アプリケーション用の』プログラミング言語」としては間違いだ。(Linusもそう言っている)
結果、C++erは「デストラクタ」「スマポ」「=のオーバーロード]をこねくり回して苦労しているが、
本来はこれらは言語側で完全に隠蔽すべき物だ。(ユーザが書く必要なんてない)
そしてRustはそれをやり、結果的にnull安全なんだろ。
正しい方向への進化だよ。(分岐元がCかC++かは何とも言い難いが)
C++はアプリケーションの動作と関係ないところで無駄に苦労するでしょ。俺はあれが嫌い。
45デフォルトの名無しさん (ワッチョイ f564-n6Dg)
2018/05/12(土) 15:19:25.30ID:V7PQOWmO0 >>44
その言い方、Rustを結構使っているように見えますが、違いますか?
Cが「ミニマルだ」ということには——少なくともISO C99規格を見るに——あまり賛同できないんですが、
それはまぁ、置いておいて、私がRustを触った限り、あれはC++の代替に見えます。
C++が現在も(規格を拡張する方向に)積極的に開発されているのは分かっていますし、
「だからRustが取って代わる必要はないのだ」という理論的帰結も理解できますが、
ポインタの安全性ややはり名前空間の宣言あたりを見ると(あくまで触りですが)どうしてもC++の文法を彷彿とさせるの
構造が多いように思いますね。
その言い方、Rustを結構使っているように見えますが、違いますか?
Cが「ミニマルだ」ということには——少なくともISO C99規格を見るに——あまり賛同できないんですが、
それはまぁ、置いておいて、私がRustを触った限り、あれはC++の代替に見えます。
C++が現在も(規格を拡張する方向に)積極的に開発されているのは分かっていますし、
「だからRustが取って代わる必要はないのだ」という理論的帰結も理解できますが、
ポインタの安全性ややはり名前空間の宣言あたりを見ると(あくまで触りですが)どうしてもC++の文法を彷彿とさせるの
構造が多いように思いますね。
46デフォルトの名無しさん (ワッチョイ f564-n6Dg)
2018/05/12(土) 15:20:29.04ID:V7PQOWmO0 あ、すいません。一行目で使ったことがないと断られていました。
いや、なぜ確認しなかったんだろう、失礼しました。
いや、なぜ確認しなかったんだろう、失礼しました。
47デフォルトの名無しさん (ワッチョイ 559f-XfH4)
2018/05/18(金) 23:11:30.66ID:qSToTkUZ0 >>45
> あれはC++の代替に見えます。
それは正しい。
というか、「後継」と「代替」はこの場合明確に区別して使われるべきだ。
・「○○の後継」---○○言語を発展させたもの。
上位互換であり、○○言語と共に使うことを考慮されている。
・「○○の代替」---○○言語の代わりに使うもの。
基本的に○○言語と一緒に使うことはない。排他的使用となる。
Rustの謳い文句は、「効率的なCバインディング」であって、
「効率的な『C++』バインディング」ではないんだよ。
CのDLLは当然呼べるが、C++のDLLを呼べるように出来ているか?
C++の「後継」と言うのなら、基本的にはC++の資産を全活用できる方向になってないといけない。
ただしそもそもC++は「後継」用のAPIを整備して無いと思うんだが。
C++の例外「実装」についてググッても、まともな文献が出てこないだろ。
おそらくあれは「実装」まで言及した仕様ではなく、「言語としての動作規定」しかされてないんだ。
(元々C++はそういうノリだし)
だからtry-catchを含んだ関数をDLL化できて他言語から呼べるかはかなり疑問だ。
勿論、昔からの課題だから今は解決されているかもしれんが。
> Throwing C++ exceptions across DLL boundaries is only possible when all modules use the same C++ runtime,
> in which case they share a heap as well. But this can be a maintenance burden,
> especially when libraries from multiple vendors are involved, so it is discouraged.
> https://stackoverflow.com/questions/5107948/throwing-c-exceptions-across-dll-boundaries
だからCのDLLは他言語(Rust/Ruby/C++/C#)等から直接呼べるが、
C++のDLLを呼べます、と謳っている奴はいないだろ。
この点において、C++は後継言語の存在を許していない。
だからRustはCの「後継」であり、C++の「代替」というのが妥当な見方なんだよ。
実際、RustがあればC++を使う意味がないだろ。
> あれはC++の代替に見えます。
それは正しい。
というか、「後継」と「代替」はこの場合明確に区別して使われるべきだ。
・「○○の後継」---○○言語を発展させたもの。
上位互換であり、○○言語と共に使うことを考慮されている。
・「○○の代替」---○○言語の代わりに使うもの。
基本的に○○言語と一緒に使うことはない。排他的使用となる。
Rustの謳い文句は、「効率的なCバインディング」であって、
「効率的な『C++』バインディング」ではないんだよ。
CのDLLは当然呼べるが、C++のDLLを呼べるように出来ているか?
C++の「後継」と言うのなら、基本的にはC++の資産を全活用できる方向になってないといけない。
ただしそもそもC++は「後継」用のAPIを整備して無いと思うんだが。
C++の例外「実装」についてググッても、まともな文献が出てこないだろ。
おそらくあれは「実装」まで言及した仕様ではなく、「言語としての動作規定」しかされてないんだ。
(元々C++はそういうノリだし)
だからtry-catchを含んだ関数をDLL化できて他言語から呼べるかはかなり疑問だ。
勿論、昔からの課題だから今は解決されているかもしれんが。
> Throwing C++ exceptions across DLL boundaries is only possible when all modules use the same C++ runtime,
> in which case they share a heap as well. But this can be a maintenance burden,
> especially when libraries from multiple vendors are involved, so it is discouraged.
> https://stackoverflow.com/questions/5107948/throwing-c-exceptions-across-dll-boundaries
だからCのDLLは他言語(Rust/Ruby/C++/C#)等から直接呼べるが、
C++のDLLを呼べます、と謳っている奴はいないだろ。
この点において、C++は後継言語の存在を許していない。
だからRustはCの「後継」であり、C++の「代替」というのが妥当な見方なんだよ。
実際、RustがあればC++を使う意味がないだろ。
48デフォルトの名無しさん (ワッチョイ 559f-XfH4)
2018/05/18(金) 23:12:06.97ID:qSToTkUZ0 Cは大規模コードに対するサポートが全くない。
とはいえ、「やれば出来るだろ by Linus」なのは事実だが、実際それでは辛いわけで、
コンパイラに任せられるところは任すという方向で上手く手抜きできるように進化させたのがC++だ。
Rustも同じ方向なのだから同様の物になるのは当たり前。
当然、どちらかを使用すれば事足り、RustとC++は排他関係になる。
つまり、RustはCの「後継」であり、C++の「代替」だ。おそらくここまでは大体の人が納得するはず。
問題はCの「代替」にもなり得るか?という点であり、だからそこが議論されているわけだ。
今現在もCを使うメリットは速度面しかない。したがって速度面のデメリットがなければ良く、
「ゼロコスト抽象化」等、速さにこだわっているのはそこなんだよ。
ただ俺個人としては、全体を一つの言語で書く必要なんて全くなくて、
NumPyのアプローチ、つまりどうでもいいところ(9割以上)はスクリプト言語で書き、
必要なところだけCのDLLを呼ぶ、というのが正しい気がするが。C#もこの方向だね。
この場合、リソース管理をGC言語側に任せられ、
また個別関数単位での切り出しになり、
DLL内関数はお互い独立(非依存)で行っても1,000行とかでしかなく、
Cでも全く問題にならないんだよ。
だからRustも微妙に中途半端な方向だとは思うが、
もし仮にCを代替できるのなら、それは素晴らしいと思うよ。
とはいえ、「やれば出来るだろ by Linus」なのは事実だが、実際それでは辛いわけで、
コンパイラに任せられるところは任すという方向で上手く手抜きできるように進化させたのがC++だ。
Rustも同じ方向なのだから同様の物になるのは当たり前。
当然、どちらかを使用すれば事足り、RustとC++は排他関係になる。
つまり、RustはCの「後継」であり、C++の「代替」だ。おそらくここまでは大体の人が納得するはず。
問題はCの「代替」にもなり得るか?という点であり、だからそこが議論されているわけだ。
今現在もCを使うメリットは速度面しかない。したがって速度面のデメリットがなければ良く、
「ゼロコスト抽象化」等、速さにこだわっているのはそこなんだよ。
ただ俺個人としては、全体を一つの言語で書く必要なんて全くなくて、
NumPyのアプローチ、つまりどうでもいいところ(9割以上)はスクリプト言語で書き、
必要なところだけCのDLLを呼ぶ、というのが正しい気がするが。C#もこの方向だね。
この場合、リソース管理をGC言語側に任せられ、
また個別関数単位での切り出しになり、
DLL内関数はお互い独立(非依存)で行っても1,000行とかでしかなく、
Cでも全く問題にならないんだよ。
だからRustも微妙に中途半端な方向だとは思うが、
もし仮にCを代替できるのなら、それは素晴らしいと思うよ。
49デフォルトの名無しさん (ワッチョイ 89fa-9WOx)
2018/05/23(水) 19:34:50.63ID:Au5e7VGg0 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
8UTJJ
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
8UTJJ
50デフォルトの名無しさん (ワッチョイ 398a-EdLk)
2018/05/24(木) 16:09:00.92ID:6FiN0bsr0 114.149.223.252
51デフォルトの名無しさん (ワッチョイ 2964-8/hF)
2018/07/02(月) 19:57:22.74ID:tgZxuU9E0 RustはCの「後継」であり、C++の「代替」
これでRust周りの(宗教戦争じみた)論争の理由が理解できた。
これでRust周りの(宗教戦争じみた)論争の理由が理解できた。
52デフォルトの名無しさん (ワッチョイ 45fa-2e90)
2018/07/04(水) 22:51:20.65ID:gFgZc5FG0 NTB
53デフォルトの名無しさん (ワッチョイ 87b3-JyQx)
2018/07/09(月) 23:31:02.20ID:bV3eVpry0 NTR
54デフォルトの名無しさん (ワッチョイ 3764-7dBI)
2018/07/26(木) 02:18:42.03ID:BvZq73xc0 ポインタってさ、「指示子」と和訳したら分かりやすいと思うんだが
そうしなかった理由ってなんだろ
それとも俺の感性がおかしいだけか
そうしなかった理由ってなんだろ
それとも俺の感性がおかしいだけか
55デフォルトの名無しさん (アウアウウー Sa43-lgLX)
2018/07/26(木) 02:38:35.19ID:rK3i9Ft7a 昔、筧先生ってひとがいて…
56デフォルトの名無しさん (ワッチョイ 3764-7dBI)
2018/07/27(金) 01:03:48.10ID:GvW3yrkV0 >>55
kwsk
kwsk
57デフォルトの名無しさん (ワッチョイ 6f9f-53i4)
2018/07/27(金) 03:35:26.85ID:O4NPrPXG0 ちょっと10回言ってみ
言い辛いよな
言い辛いよな
58デフォルトの名無しさん (ワッチョイ 3764-7dBI)
2018/07/27(金) 17:21:35.88ID:GvW3yrkV0 え? なに? もしかして昔なにか荒れる原因になった ANDOR 問題のある人が使ってた用語なのか。
若いもんで知らなかったわ すいません。
若いもんで知らなかったわ すいません。
59デフォルトの名無しさん (ワッチョイ 9f93-BNWp)
2018/07/28(土) 09:57:54.67ID:VMG9DnUG0 「指示子のgcc拡張」みたいな早口言葉モドキができて面白いかも。
60デフォルトの名無しさん (アウアウエー Saaa-2QVD)
2018/07/28(土) 13:58:33.27ID:39ICzHjEa 指示子の指示子
指示子の配列
配列の指示子
配列の指示子の指示子
指示子の配列の指示子
ダブル指示子
配列の指示子の配列 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
指示子の配列
配列の指示子
配列の指示子の指示子
指示子の配列の指示子
ダブル指示子
配列の指示子の配列 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
61デフォルトの名無しさん (ワッチョイ e3af-hN3z)
2018/07/28(土) 15:05:25.84ID:BHZfW2WL0 >>60
なんかおこられてやんの
なんかおこられてやんの
62デフォルトの名無しさん (アウアウエー Saaa-2QVD)
2018/07/28(土) 15:08:57.51ID:39ICzHjEa こんなので目玉付くんだなω
63デフォルトの名無しさん (ワッチョイ 4364-vmb7)
2018/08/05(日) 00:49:09.36ID:fZk3Cg460 C99(ISO/IEC 9899:1999)で,main()関数の型がintな理由ってどこかに書いてあるっけ。
今ふと,リターンコードって0から255の整数なんだから
uint8_t main(...
としても問題ないよなと思ってさ。
今ふと,リターンコードって0から255の整数なんだから
uint8_t main(...
としても問題ないよなと思ってさ。
64デフォルトの名無しさん (ワッチョイ 4364-vmb7)
2018/08/05(日) 00:50:03.59ID:fZk3Cg460 すまん。途中で送信してしまった。
そうするとコンパイラにmain()の型はintだと怒られた。
そうするとコンパイラにmain()の型はintだと怒られた。
65デフォルトの名無しさん (アウアウウー Saa7-Okn4)
2018/08/05(日) 01:34:55.28ID:/g7t90jda 型がintというのは決まってる。
実際の範囲は実装依存。windowsだと違ってなかったか?
実際の範囲は実装依存。windowsだと違ってなかったか?
66デフォルトの名無しさん (ワッチョイ a39f-Xflc)
2018/08/05(日) 07:12:37.38ID:cdvogGHQ0 main()が戻す値は呼び出す側の問題だとは思うが、その部分(crt0とか)は普通はC言語に合わせてintを
返してくると想定して作られていると思う。しかしその部分まで自作するというのであればなんでもアリではある。
https://en.wikipedia.org/wiki/Crt0
返してくると想定して作られていると思う。しかしその部分まで自作するというのであればなんでもアリではある。
https://en.wikipedia.org/wiki/Crt0
67デフォルトの名無しさん (ワッチョイ 6393-o77x)
2018/08/05(日) 08:37:27.73ID:5+7WSxVZ0 シェルが受け入れるコマンドの終了ステータスの値が0-255の範囲、
てのはUNIX系もDOS系も(珍しく)一致してるのね。
unsigned char の外に出ないことは間違いないわね。
ANSI以前の古いCでの「宣言なしに使われた外部関数はintの値を返す」
という仕様が、規格化したときに互換性の問題を生まないように
main()の返り値はintと決めたんじゃないかしら。
てのはUNIX系もDOS系も(珍しく)一致してるのね。
unsigned char の外に出ないことは間違いないわね。
ANSI以前の古いCでの「宣言なしに使われた外部関数はintの値を返す」
という仕様が、規格化したときに互換性の問題を生まないように
main()の返り値はintと決めたんじゃないかしら。
68デフォルトの名無しさん (ワッチョイ 4364-vmb7)
2018/08/05(日) 12:29:08.02ID:fZk3Cg460 なるほど。まあ過去互換性は重要だしね。
ただ,CはPOSIXというOSの標準規格を定めてる団体が関与して設計されてるから「リターンコードは0--255。よってmain関数の型はuint8_t」と割り切ってくれてもいいのになぁ。
とか勝手に思ったりしてる。
ただ,CはPOSIXというOSの標準規格を定めてる団体が関与して設計されてるから「リターンコードは0--255。よってmain関数の型はuint8_t」と割り切ってくれてもいいのになぁ。
とか勝手に思ったりしてる。
69デフォルトの名無しさん (アウアウウー Saa7-Okn4)
2018/08/05(日) 13:13:57.79ID:/g7t90jda まあintが妥当だろう。
しかし、_exit()に渡すのがintでwait()した時も一応exit statusはintだよな。
どこで上位ビット欠落させてんだ?
しかし、_exit()に渡すのがintでwait()した時も一応exit statusはintだよな。
どこで上位ビット欠落させてんだ?
70デフォルトの名無しさん (ワッチョイ a39f-Xflc)
2018/08/05(日) 18:30:06.69ID:cdvogGHQ071デフォルトの名無しさん (ワッチョイ 4364-vmb7)
2018/08/06(月) 01:15:24.28ID:/d0+B2Ty0 ちょっとCの範疇を越えた話になるけど
リターンコードが0--255ってどういう段階で決定されたんだろう。
DOSとUnixが同じ範囲のリターンコードを持ってるって、偶然とは考えがたいんだけども
リターンコードが0--255ってどういう段階で決定されたんだろう。
DOSとUnixが同じ範囲のリターンコードを持ってるって、偶然とは考えがたいんだけども
72デフォルトの名無しさん (ワッチョイ b3e3-0Uuo)
2018/08/06(月) 02:07:20.39ID:xc/1a6k50 unix等の先行者を参考にDOSを作ったんだから
73デフォルトの名無しさん (ワッチョイ 6393-o77x)
2018/08/06(月) 07:45:24.26ID:1aQ1rnwf0 DOSの終了ステータスはUNIXの仕様をそのまま使用だと思う。
UNIXの方は、子プロセスを作って別の仕事をさせるって定型処理で、
「親プロセスで子プロセスの終了を待つ」ためのwait()系の関数が、
・子プロセスが正常終了した場合は子プロセスの終了ステータス
・子プロセスが割込みで中断された場合は割込みの種類
という2つの情報を1個の返り値で戻すことと関係あるのじゃないかな。
1個の整数値を上位と下位のビット群に分けて別の情報として使うために
それぞれの情報量を1バイトずつに制限した、と。
UNIXの方は、子プロセスを作って別の仕事をさせるって定型処理で、
「親プロセスで子プロセスの終了を待つ」ためのwait()系の関数が、
・子プロセスが正常終了した場合は子プロセスの終了ステータス
・子プロセスが割込みで中断された場合は割込みの種類
という2つの情報を1個の返り値で戻すことと関係あるのじゃないかな。
1個の整数値を上位と下位のビット群に分けて別の情報として使うために
それぞれの情報量を1バイトずつに制限した、と。
74デフォルトの名無しさん (ワッチョイ 3323-yKTt)
2018/08/06(月) 08:23:05.65ID:jTWGCXc00 UNIX板のおじさんに聞いてみたら
75デフォルトの名無しさん (ワッチョイ 5ed5-ISgX)
2018/08/26(日) 08:24:46.45ID:dLFVucRz0 auto変数で char配列を可変長で動的に確保する方法は無いかな。
アセンブラレベルならスタックポインタを操作すれば可能だと思うが。
文字列処理の内部バッファとして入力に合わせたサイズを確保したいんだが、とりあえず今は固定長バッファとそれを超える場合は malloc でやってる。
アセンブラレベルならスタックポインタを操作すれば可能だと思うが。
文字列処理の内部バッファとして入力に合わせたサイズを確保したいんだが、とりあえず今は固定長バッファとそれを超える場合は malloc でやってる。
76さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd0a-5N5t)
2018/08/26(日) 09:09:31.40ID:Vxoswi+gd alloca
77デフォルトの名無しさん (ワッチョイ eab3-vpIp)
2018/08/26(日) 09:18:39.26ID:O9adGcKd078デフォルトの名無しさん (ワッチョイ 954f-kiUO)
2018/08/26(日) 09:29:28.31ID:ik1BtrwR07975 (ワッチョイ 5ed5-ISgX)
2018/08/26(日) 09:31:08.30ID:dLFVucRz0 >>76-77
ありがとう、まさにぴったり。
言語レベルでの可変長配列は C11 から(オプションだけど)入ってるんだね。
90年代からメンテされてるコードだからそっちは使えなそうだけど、alloca を検討してみる。
ありがとう、まさにぴったり。
言語レベルでの可変長配列は C11 から(オプションだけど)入ってるんだね。
90年代からメンテされてるコードだからそっちは使えなそうだけど、alloca を検討してみる。
80デフォルトの名無しさん (ワッチョイ eab3-vpIp)
2018/08/26(日) 10:56:05.32ID:O9adGcKd0 >>79
環境わからんからなんとも言えんが組込みとかWindowsとか意外にスタックサイズがしょぼい環境あるから気を付けてね
環境わからんからなんとも言えんが組込みとかWindowsとか意外にスタックサイズがしょぼい環境あるから気を付けてね
81デフォルトの名無しさん (アウアウウー Saa1-ROXf)
2018/08/26(日) 11:49:56.37ID:hQMrm9ZNa いやいや、C99からだよ。C11でオプションになった。答える方はそのくらい知っとけよ。
まあ入力が小さいのが予め分かってないと使いにくい機能だよ。
まあ入力が小さいのが予め分かってないと使いにくい機能だよ。
82デフォルトの名無しさん (ワッチョイ ed9f-PcWx)
2018/08/26(日) 13:04:10.92ID:HHP/3bjy0 >>75
その入力というのがファイルからの1行入力みたいなものならば getline() 使ってしまえば
自分で考える必要がなくて楽だ。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/getline.3.html
その入力というのがファイルからの1行入力みたいなものならば getline() 使ってしまえば
自分で考える必要がなくて楽だ。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/getline.3.html
83デフォルトの名無しさん (ワッチョイ bd93-zO5i)
2018/08/26(日) 15:51:52.71ID:0Dyu3Dip0 発端の >>75 の意図次第だが、free()しなくても安全に蒸発して欲しいとか、
ヒープの確保と解放の処理時間を嫌っての話ならgetline()はちょいと違うね。
文字数の予測が難しい入力を扱うにはとても便利なんだけど。
それにしても「上級者専用」って看板が架かってることを意識すると
このスレッドは書き込みにくいな。気後れしちゃう。
ヒープの確保と解放の処理時間を嫌っての話ならgetline()はちょいと違うね。
文字数の予測が難しい入力を扱うにはとても便利なんだけど。
それにしても「上級者専用」って看板が架かってることを意識すると
このスレッドは書き込みにくいな。気後れしちゃう。
84デフォルトの名無しさん (ワッチョイ ed68-DNis)
2018/08/26(日) 16:14:52.46ID:tQPCeAJ90 alloca
85デフォルトの名無しさん (アウアウウー Saa1-ROXf)
2018/08/26(日) 16:21:37.62ID:hQMrm9ZNa 動的確保が無難なんだよね。最後にfreeすればいいだけだし。
最近まで知らなかったんだけどscanfで%msで動的確保してくれるの便利だな。scanf自体はなかなか難しくて使いづらいが…
最近まで知らなかったんだけどscanfで%msで動的確保してくれるの便利だな。scanf自体はなかなか難しくて使いづらいが…
8675 (ワッチョイ 5ed5-ISgX)
2018/08/26(日) 17:31:54.88ID:dLFVucRz0 >>81
あ、C99で入ったのをC11でオプショナルに格下げ(?)されたってことか。
処理系によっては厳しい実装なのかな。
やりたいことってのは文字列のエスケープを含んだ組み立てなんだけど、使用するエスケープ関数がありものでその仕様は入力文字列長に対して2倍以上の出力バッファを与えないといけないことになってる(出力サイズを指定して打ち切らせることができない)。
実際に2倍に膨らむことは稀だし、エスケープするのも文字列中の一部なので、自分の処理で最終的に出す出力結果は論理最大よりかなり小さくなる(自分の処理は指定された出力長で打ち切る)。
まず来ることが無い事態のために論理最大の配列を取っておくのもどうかと思い、いい方法があるかここで相談させてもらった。
しかし想定外のことが起きちゃった時にどうなるべきかを考えてどうするかを決めるから、もしかしたら動的配列の意義が無くなって別の方法にするかもしれない。
この処理自体は高頻度で呼ばれるから、高速で省メモリそして内部的な都合での打ち切りは極力避けた作りにしたいって感じ。
いろいろコメントありがとう
あ、C99で入ったのをC11でオプショナルに格下げ(?)されたってことか。
処理系によっては厳しい実装なのかな。
やりたいことってのは文字列のエスケープを含んだ組み立てなんだけど、使用するエスケープ関数がありものでその仕様は入力文字列長に対して2倍以上の出力バッファを与えないといけないことになってる(出力サイズを指定して打ち切らせることができない)。
実際に2倍に膨らむことは稀だし、エスケープするのも文字列中の一部なので、自分の処理で最終的に出す出力結果は論理最大よりかなり小さくなる(自分の処理は指定された出力長で打ち切る)。
まず来ることが無い事態のために論理最大の配列を取っておくのもどうかと思い、いい方法があるかここで相談させてもらった。
しかし想定外のことが起きちゃった時にどうなるべきかを考えてどうするかを決めるから、もしかしたら動的配列の意義が無くなって別の方法にするかもしれない。
この処理自体は高頻度で呼ばれるから、高速で省メモリそして内部的な都合での打ち切りは極力避けた作りにしたいって感じ。
いろいろコメントありがとう
87デフォルトの名無しさん (ワッチョイ ed68-DNis)
2018/08/26(日) 17:43:02.62ID:tQPCeAJ90 あらかじめプールしておいて使いまわす
足りない時だけ臨時で増やす
足りない時だけ臨時で増やす
88さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd0a-5N5t)
2018/08/26(日) 18:09:50.26ID:Vxoswi+gd ReactOSというOSでフォントエンジンの改良を行っているが、
Google Chromeというブラウザでおかしくなる。
何故かEIPレジスタがゼロになって、初回例外が発生する。KDBという付属のデバッガでトレースしたが、
どこの関数で例外が発生しているかわからない。
たすけて。。。
Google Chromeというブラウザでおかしくなる。
何故かEIPレジスタがゼロになって、初回例外が発生する。KDBという付属のデバッガでトレースしたが、
どこの関数で例外が発生しているかわからない。
たすけて。。。
89さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd0a-5N5t)
2018/08/26(日) 18:15:57.28ID:Vxoswi+gd90さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd0a-5N5t)
2018/08/26(日) 18:22:22.54ID:Vxoswi+gd 晒しあげ
91さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd0a-5N5t)
2018/08/26(日) 18:39:01.79ID:Vxoswi+gd スタック破壊の可能性か。。。
92デフォルトの名無しさん (ワッチョイ 954f-kiUO)
2018/08/26(日) 19:04:13.59ID:ik1BtrwR0 >>85
> 動的確保が無難なんだよね。最後にfreeすればいいだけだし。
結局の所、結論としてはそうだね。
>>86
多分素直にmallocする関数をラップして使う方がいい。
仕様の動向自体は知らんが、
> 処理系によっては厳しい実装なのかな。
技術的にはこれはない。alloca相当(ポインタ相当)にすればいいだけなので。
ただ、間接アクセスになるから速度は落ちるし、
mallocに対しての利点は『自分で』freeしなくて済むことくらいしかない。
(『自分で』ソースに書かなくてよくなるだけで、速度上のメリットはない。
reallocaが無い為、最初のバッファ(=サイズが不明)はヒープ上に動的確保するしかなく、
自分で書いてなくてもどこかでfreeされてるだけだから。なら最初からgetlineでもいいし)
ただ、そちらの実装は(おそらくバッファオーバラン対策で)一旦固定長バッファに取り込み、
その後alloca領域に対してのコピーか?
ならまあ一応freeしなくていい速度上のメリットは残るが、
一般的にはスタックサイズ管理のコストが増える方が問題とされ、その実装はないとも思うが。
結局、allocaもイマイチなんだよ。だから標準にもなりきれない。
> 動的確保が無難なんだよね。最後にfreeすればいいだけだし。
結局の所、結論としてはそうだね。
>>86
多分素直にmallocする関数をラップして使う方がいい。
仕様の動向自体は知らんが、
> 処理系によっては厳しい実装なのかな。
技術的にはこれはない。alloca相当(ポインタ相当)にすればいいだけなので。
ただ、間接アクセスになるから速度は落ちるし、
mallocに対しての利点は『自分で』freeしなくて済むことくらいしかない。
(『自分で』ソースに書かなくてよくなるだけで、速度上のメリットはない。
reallocaが無い為、最初のバッファ(=サイズが不明)はヒープ上に動的確保するしかなく、
自分で書いてなくてもどこかでfreeされてるだけだから。なら最初からgetlineでもいいし)
ただ、そちらの実装は(おそらくバッファオーバラン対策で)一旦固定長バッファに取り込み、
その後alloca領域に対してのコピーか?
ならまあ一応freeしなくていい速度上のメリットは残るが、
一般的にはスタックサイズ管理のコストが増える方が問題とされ、その実装はないとも思うが。
結局、allocaもイマイチなんだよ。だから標準にもなりきれない。
93デフォルトの名無しさん (ワッチョイ 954f-kiUO)
2018/08/26(日) 19:12:21.53ID:ik1BtrwR0 >>83
>>1,13読んで以下にどうぞ。
C言語なら俺に聞け
https://mevius.5ch.net/test/read.cgi/tech/1534430162/
>>12
>>89
それがこのスレの正しい使い方かもしれんね。
ぱっと見て分かるものでもないけどさ。
>>1,13読んで以下にどうぞ。
C言語なら俺に聞け
https://mevius.5ch.net/test/read.cgi/tech/1534430162/
>>12
>>89
それがこのスレの正しい使い方かもしれんね。
ぱっと見て分かるものでもないけどさ。
94デフォルトの名無しさん (アウアウウー Saa1-ROXf)
2018/08/26(日) 19:20:25.22ID:uLlG7vHAa allocaとか動的サイズ指定の配列はスタックだから基本的にはmallocするよりは速いよ。頑張っても同等。
繰り返して呼ぶなら差が出るかもね。
繰り返して呼ぶなら差が出るかもね。
95デフォルトの名無しさん (ワッチョイ 954f-kiUO)
2018/08/26(日) 19:53:34.99ID:ik1BtrwR0 ああ、言い直しておくよ。
allocaとmallocなら、
確保:allocaの方が速い
使用:同速(ただし初回からキャッシュが当たる分allocaの方が速い)
解放:freeの必要が無い分、allocaの方が速い
(ただし実装によっては上位でfreeしてるだけであり、同速)
管理:通常、ヒープサイズ>>>>>>スタックサイズの為、サイズ管理が必要
速度差が見えるような使い方が出来るのなら、ある意味大したもんだと思うよ。
allocaとmallocなら、
確保:allocaの方が速い
使用:同速(ただし初回からキャッシュが当たる分allocaの方が速い)
解放:freeの必要が無い分、allocaの方が速い
(ただし実装によっては上位でfreeしてるだけであり、同速)
管理:通常、ヒープサイズ>>>>>>スタックサイズの為、サイズ管理が必要
速度差が見えるような使い方が出来るのなら、ある意味大したもんだと思うよ。
96デフォルトの名無しさん (アウアウカー Sad5-nhzT)
2018/08/26(日) 20:17:14.11ID:iSNBdVUGa スタックって確かスレッド毎に肥大化してくよね?
で、肥大化してもスレッドが停止するまで縮小しない
あってる?
で、肥大化してもスレッドが停止するまで縮小しない
あってる?
97さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 35b3-5N5t)
2018/08/26(日) 20:19:54.25ID:r4V1HxTD0 関数から戻るとき(エピローグ)にスタックは縮小することがある。
98さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd0a-5N5t)
2018/08/26(日) 20:26:06.20ID:Vxoswi+gd 実際のx86 CPUでスタックポインタを表しているのが、ESPレジスタの値。スタックサイズの増減はESPの書き換えに過ぎない。
9975 (ワッチョイ 5ed5-ISgX)
2018/08/26(日) 20:30:48.56ID:dLFVucRz0 流れのついでに聞いてみたいけど、malloc はスレッドセーフでしょ。
てことは内部で排他をかけてると思うけど、となるとマルチスレッド下で malloc や free を多発させるとパフォーマンス的に良くなかったりしないかな。
言ってなくてごめんだけど、今回の処理はマルチスレッドで動くんだ。
なのでバッファはスタック上に取れると都合がいいという事情もあるし、特別な初期化手順や終了手順も用意したくないから事前に malloc して使い回すってのもやりづらい。
ちなみに動作環境は x86 linux だから、alloca は SP をズラすだけの非常に高速な実装になってるんじゃないかと想像してるから、関心は高い。
でも、最悪でもスタック上に収まるバッファという前提にするなら最初から論理最大サイズ固定のバッファで良くね?なんて話もあるから、実際にどうするかはこれから検討。
てことは内部で排他をかけてると思うけど、となるとマルチスレッド下で malloc や free を多発させるとパフォーマンス的に良くなかったりしないかな。
言ってなくてごめんだけど、今回の処理はマルチスレッドで動くんだ。
なのでバッファはスタック上に取れると都合がいいという事情もあるし、特別な初期化手順や終了手順も用意したくないから事前に malloc して使い回すってのもやりづらい。
ちなみに動作環境は x86 linux だから、alloca は SP をズラすだけの非常に高速な実装になってるんじゃないかと想像してるから、関心は高い。
でも、最悪でもスタック上に収まるバッファという前提にするなら最初から論理最大サイズ固定のバッファで良くね?なんて話もあるから、実際にどうするかはこれから検討。
100デフォルトの名無しさん (ブーイモ MM8e-0l9r)
2018/08/26(日) 20:39:55.03ID:QMrmo6TZM glibcのmallocならサブarenaから獲得してくるから性能問題にはならないらしい
101デフォルトの名無しさん (ファミワイ FF49-DNis)
2018/08/26(日) 21:03:16.49ID:KvfxyzVvF そうだよ
条件後出しω
条件後出しω
102デフォルトの名無しさん (ワッチョイ 954f-kiUO)
2018/08/26(日) 21:06:39.43ID:ik1BtrwR0 >>99
サイズの問題がないのならallocaを使うことに問題はない。
mallocより遅くなる理由もないので。
ただ、普通に組めば分かるが、
> malloc や free を多発させる
ってのがあり得ない。
仮にこれがallocaで有効に代用出来るとするなら、再帰下降パーサ等、「再帰」が必要になるが、
再帰下降パーサの場合はインミュータブルでよく、元の文書をオフセット付きで参考して終わりだ。
再びallocaすることはない。
同様に、ループでパースするのなら、ループの外でmallocして十分な領域を確保し、
そこに上書きで使うことになる。だからmalloc/freeは1回ずつで済む。
もう一度言うが、allocaはスタックだから、「再帰」しないと領域を追加出来ない。
この使い方は普通無いし、君もやって無いと思うよ。
でも、普通のmallocを全部allocaで代用しても、サイズ以外の問題は無いから、可能ならそれでもいい。
サイズの問題がないのならallocaを使うことに問題はない。
mallocより遅くなる理由もないので。
ただ、普通に組めば分かるが、
> malloc や free を多発させる
ってのがあり得ない。
仮にこれがallocaで有効に代用出来るとするなら、再帰下降パーサ等、「再帰」が必要になるが、
再帰下降パーサの場合はインミュータブルでよく、元の文書をオフセット付きで参考して終わりだ。
再びallocaすることはない。
同様に、ループでパースするのなら、ループの外でmallocして十分な領域を確保し、
そこに上書きで使うことになる。だからmalloc/freeは1回ずつで済む。
もう一度言うが、allocaはスタックだから、「再帰」しないと領域を追加出来ない。
この使い方は普通無いし、君もやって無いと思うよ。
でも、普通のmallocを全部allocaで代用しても、サイズ以外の問題は無いから、可能ならそれでもいい。
103デフォルトの名無しさん (ワッチョイ 954f-kiUO)
2018/08/26(日) 21:08:26.06ID:ik1BtrwR0 > alloca は SP をズラすだけの非常に高速な実装になってるんじゃないかと想像してるから
これはその通り。
> 最初から論理最大サイズ固定のバッファで良くね?
これもその通り。上記ループなら普通これで行く。
それがスタック上で問題になるサイズならmalloc/freeが1回ずつ必要になる。
だから君の今の実装>>75もさほど悪いわけでもない。
今風の「実装を外に漏らさない」方針なら子関数でmalloc/freeやallocaすることになる。
おそらくそれで考えているのだと思うが、元々のCの思想はそれとは違い、
char* buff = (char*)malloc( ... ); // または char buff[2048]; 等
while (....) {
parse_func(buff, .... );
}
free(buff);
として外側で確保し、それをparse_funcに渡す。
これにより、変数の寿命とスタックの動作を一致させ、freeし忘れもなくなる。
この方法だと、allocaで毎回「SP をズラすだけ」すらする必要なく、parse_func内は最速になる。
(allocaを毎回繰り返すよりも速い)
これはその通り。
> 最初から論理最大サイズ固定のバッファで良くね?
これもその通り。上記ループなら普通これで行く。
それがスタック上で問題になるサイズならmalloc/freeが1回ずつ必要になる。
だから君の今の実装>>75もさほど悪いわけでもない。
今風の「実装を外に漏らさない」方針なら子関数でmalloc/freeやallocaすることになる。
おそらくそれで考えているのだと思うが、元々のCの思想はそれとは違い、
char* buff = (char*)malloc( ... ); // または char buff[2048]; 等
while (....) {
parse_func(buff, .... );
}
free(buff);
として外側で確保し、それをparse_funcに渡す。
これにより、変数の寿命とスタックの動作を一致させ、freeし忘れもなくなる。
この方法だと、allocaで毎回「SP をズラすだけ」すらする必要なく、parse_func内は最速になる。
(allocaを毎回繰り返すよりも速い)
104デフォルトの名無しさん (アウアウウー Saa1-ROXf)
2018/08/26(日) 21:12:44.54ID:uLlG7vHAa あくまで処理系依存の話として…
マルチスレッド固有の問題はほぼない気がしますね。malloc/freeは単に別の領域確保していくだけだしスタックの場合はスレッド生成時に確保すると。
で、まあmallocの実装はそこまで悪くないと思うけどスタックが速いし、さらに静的領域の方がちょっと命令数は少なくなるでしょう。
マルチスレッド固有の問題はほぼない気がしますね。malloc/freeは単に別の領域確保していくだけだしスタックの場合はスレッド生成時に確保すると。
で、まあmallocの実装はそこまで悪くないと思うけどスタックが速いし、さらに静的領域の方がちょっと命令数は少なくなるでしょう。
10575 (ワッチョイ 5ed5-ISgX)
2018/08/26(日) 21:36:27.43ID:dLFVucRz0106デフォルトの名無しさん (ブーイモ MM8e-0l9r)
2018/08/26(日) 21:52:41.59ID:QMrmo6TZM >>96
実行環境依存だが、win/linuxならその認識で良い
allocaは便利だがスタックの肥大化を加速させるので
環境によっては注意が必要
>>105
興味があれば
https://youtu.be/0-vWT-t0UHg
実行環境依存だが、win/linuxならその認識で良い
allocaは便利だがスタックの肥大化を加速させるので
環境によっては注意が必要
>>105
興味があれば
https://youtu.be/0-vWT-t0UHg
107さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 35b3-5N5t)
2018/08/26(日) 22:03:50.42ID:r4V1HxTD0 >>97-98 間違いです。すみません。
108デフォルトの名無しさん (ワッチョイ 954f-kiUO)
2018/08/26(日) 22:07:11.30ID:ik1BtrwR0 >>105
以下読め。マルチスレッドに関する疑問点については全部書いてあるから。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/malloc.3.html
以下読め。マルチスレッドに関する疑問点については全部書いてあるから。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/malloc.3.html
109デフォルトの名無しさん (アウアウウー Saa1-ROXf)
2018/08/26(日) 22:08:38.19ID:uLlG7vHAa11075 (ワッチョイ 5ed5-UqfJ)
2018/08/26(日) 23:49:28.30ID:dLFVucRz0 >>106
すげーおもしろかった!
マルチスレッドでどうやってるかについても分かったよ。
過渡期の性能を犠牲にして使っていくうちにいい状態に収束するようにしてるのね。
しかし malloc のコードが 5000行てw
ただ、mmap すればメモリ管理のコストが小さい的な言いぶりはどうかなって気はするな、動画の中でもツッコミ入ってるっぽいけど。
結局カーネルだって何らかの形でアドレス空間の空きを検索するし、アドレス空間を割り当てる処理にしても排他はかけてるはずだから、それなりのコストはかかるし競合の問題もあるよね(ユーザーがやる処理よりも高効率だろうと思うけど)。
>>105
malloc の話を持ち出したのは、排他とかで結構遅いんじゃね?ってのが出発点なので、
排他はしてるって言うし mmap だからという説明じゃ解決って話でもないかなって感じ。
>>109
>>75 の頃の時点では K&R アロケータ程度の認識だったからマルチスレッド下ですげー遅そうな印象だったけど、さすがによく考えられているということは分かったよ。
ちなみにこれも読み始めてた。
https://www.valinux.co.jp/technologylibrary/document/linux/malloc0001/
>>106 の動画を見てだいぶ見通しがよくなった。
すげーおもしろかった!
マルチスレッドでどうやってるかについても分かったよ。
過渡期の性能を犠牲にして使っていくうちにいい状態に収束するようにしてるのね。
しかし malloc のコードが 5000行てw
ただ、mmap すればメモリ管理のコストが小さい的な言いぶりはどうかなって気はするな、動画の中でもツッコミ入ってるっぽいけど。
結局カーネルだって何らかの形でアドレス空間の空きを検索するし、アドレス空間を割り当てる処理にしても排他はかけてるはずだから、それなりのコストはかかるし競合の問題もあるよね(ユーザーがやる処理よりも高効率だろうと思うけど)。
>>105
malloc の話を持ち出したのは、排他とかで結構遅いんじゃね?ってのが出発点なので、
排他はしてるって言うし mmap だからという説明じゃ解決って話でもないかなって感じ。
>>109
>>75 の頃の時点では K&R アロケータ程度の認識だったからマルチスレッド下ですげー遅そうな印象だったけど、さすがによく考えられているということは分かったよ。
ちなみにこれも読み始めてた。
https://www.valinux.co.jp/technologylibrary/document/linux/malloc0001/
>>106 の動画を見てだいぶ見通しがよくなった。
111デフォルトの名無しさん (ワッチョイ a69f-8MCF)
2018/08/27(月) 00:24:32.33ID:+HD/yYG+0 >>63
5.1.2.2.1
5.1.2.2.1
112デフォルトの名無しさん (ワッチョイ 2564-Yh1A)
2018/08/27(月) 04:36:47.89ID:y2YT/eYl0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★5 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 高市内閣「支持」64%「不支持」19% NHK世論調査 ★2 [少考さん★]
- 【速報】気象庁がマグニチュード7.5に修正しました [ニョキニョキ★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 高市首相「多様なコメの増産を進める」 方針転換への懸念払拭狙いか ★2 [どどん★]
- 首都直下地震来るぞマジで
- 【高市速報】気象庁、後発地震注意情報を発表、運用開始後で初。対象地域では1週間程度同程度の地震が起こる可能.性 [931948549]
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- かっぱ寿司←こいつが天下取れなかった理由
- 巨大地震 [957955821]
- 何でデートでリュック背負って来たらダメなの?
