C言語なら俺に聞け 156

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 9bb7-/QqT)
垢版 |
2020/09/28(月) 14:41:30.00ID:QxfbhGyV0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
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/

※前スレ
C言語なら俺に聞け 155
https://mevius.5ch.net/test/read.cgi/tech/1589120427/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/01/20(水) 20:48:15.35ID:h5t/8l7N0
おまえバカだろ
RAM 16バイトの底辺CPUに比べて超リッチな環境だって話
2021/01/20(水) 22:02:18.04ID:6vEnElCe0
バカはお前w
それは単に比べる相手がおかしいだけだろ
569デフォルトの名無しさん (ワッチョイ e101-RjaL)
垢版 |
2021/01/21(木) 00:28:31.26ID:MGeCCcUA0
GUIが無いんだろ、最強じゃんw
2021/01/21(木) 06:10:52.98ID:gXoiSngNH
C「を」書いたのはリッチー
2021/01/21(木) 07:07:18.10ID:zKx4b76A0
A「おれ財布に16円しかない」
B「おれ今16万円も入ってるよ超リッチ」

>>566「16万円で超リッチとは何て安上がりなんだ」
>>566「ビル・ゲイツの財布には16億円入ってる」

A「???」
B「???」
A「誰?」
B「何で突然ビル・ゲイツ?」
A「いや、おれの財布に16円しか入ってないって話を...」

>>566「それは単に比べる相手がおかしいだけだろ」

A,B「???」
2021/01/21(木) 07:12:03.65ID:rjSQv0Wq0
>>571
それどう見ても「個人所有してたら超リッチ」って話だろ…
>>561は一体何を言いたかったんだ?
2021/01/21(木) 07:31:52.93ID:zKx4b76A0
開発ターゲットの話
2021/01/21(木) 08:08:33.69ID:rjSQv0Wq0
>>573
だからターゲットもチープな組込みからスパコンまであるだろ
限定なしに超リッチとか言われても井の中の蛙が語ってるとしか思えん
2021/01/21(木) 08:12:32.96ID:zKx4b76A0
>>574
>>571
2021/01/21(木) 08:38:58.68ID:rjSQv0Wq0
>>575
だからそう言うのは井の中でやれよって話
2021/01/21(木) 12:02:22.51ID:NDHJTNIed
流れも理解せずに話に勝手に入って来て
何を言ってるんだか
2021/01/21(木) 12:34:13.57ID:8rFkGfvd0
ここは胃の中です
2021/01/21(木) 13:14:18.23ID:hceb9QsBa
頭はプアです
2021/01/21(木) 13:40:44.42ID:xengUv2k0
もう引っ張ることでも無いやろ
2021/01/21(木) 13:54:25.02ID:rjSQv0Wq0
勝手に入ってこられるのが嫌ならブログででもやってろよw
バカすぎる
2021/01/21(木) 22:19:55.22ID:Z9MWAls10
>>570
エデ・イー?
583デフォルトの名無しさん (エムゾネ FF7f-rvE3)
垢版 |
2021/01/22(金) 12:29:52.09ID:pJ+Dy7HCF
最近のOSってmallocで実メモリ足りないときはHDD/SSDからとってきてくれるんでしょう?
2021/01/22(金) 12:44:10.92ID:MTKvFG+KM
仮想記憶のことなら全然違うし、全然最近でもないし、swapも埋まればmalloc失敗すると思うけど、何だろう
2021/01/22(金) 12:50:00.55ID:3IahkNr8M
仮想アドレス空間に隙間がなければ失敗するけどな
2021/01/22(金) 13:07:46.80ID:/3jYtxszd
>>584
いや
全然違うってこともない
イメージ的にはそれでいい
2021/01/22(金) 14:43:34.68ID:Pa9c7HBM0
スタック領域もコード領域も足りなくなったら補助記憶装置にスワップアウトするしmallocとは直接関係はしないよ
2021/01/22(金) 14:52:58.55ID:B/3A9QDar
コードがスワップアウトしたら実行中のプロセスはどうなるんでしょうか?
2021/01/22(金) 14:59:09.88ID:gbaM/AZn0
コード領域までスワップアウトすることがあるかどうかわからんけど、
あったとしたらタイムスライスの割り当てが戻ってきたときにその退避してたコードも
メモリに戻すことになるだけでしょ。
2021/01/22(金) 15:03:45.51ID:/3jYtxszd
>>587
mallocと直接関係ある
なんて誰も書いてない
2021/01/22(金) 15:07:21.69ID:/3jYtxszd
>>588
アクセスした瞬間に例外発生
これを受けてHDD/SSDに退避してあったデータをメインメモリに戻して例外を復帰する

コードデータ関係なく
2021/01/22(金) 15:18:29.37ID:Pa9c7HBM0
>>590
>>583を100回音読してこい
2021/01/22(金) 15:22:19.21ID:/3jYtxszd
主語はOS
2021/01/22(金) 15:25:32.00ID:/3jYtxszd
mallocは単なるトリガー(の1例)
2021/01/22(金) 16:21:31.38ID:Pa9c7HBM0
主語でないと関係しないって?
日本語の勉強からやり直した方がいいと思うよ
結構マジで
2021/01/22(金) 16:28:50.78ID:/3jYtxszd
非制限用法
2021/01/22(金) 16:30:53.38ID:/3jYtxszd
直接関係してなかろうと
(例えば)mallocをトリガーとしてスワップすることは事実
2021/01/22(金) 19:42:10.12ID:Pa9c7HBM0
>>596
頭大丈夫?
そろそろ黙ったほうが良くね?
2021/01/22(金) 20:55:52.26ID:red8nkhVM
確かに直接関係はしないな
syscallというレイヤーが挟まるから

で?それがどうした?
2021/01/22(金) 22:55:39.06ID:Pa9c7HBM0
>>597
> (例えば)mallocをトリガーとしてスワップすることは事実
するとは限らんしそもそも仮想記憶のない環境もあるし何が事実だかw
2021/01/22(金) 23:26:46.95ID:LtnZZu+T0
mallocがスワップアウト要求すんのか? ページアウトですらなく?
602デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/23(土) 00:33:31.85ID:MUxSQoqh0
mallocは常に成功する、問題はそのメモリにアクセスした時
2021/01/23(土) 00:37:30.76ID:QrEIYEWsM
Cでマルチスレッドなプログラム書くときのデザインパターンというか、オススメの書き方って何かある?
604デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/23(土) 00:40:17.93ID:MUxSQoqh0
>>603
pthread
2021/01/23(土) 00:47:46.15ID:JHWvmAOA0
>>603
私は c++11 以降に移行しました、言語が MT をサポしてくれているのはありがたいです‥
2021/01/23(土) 03:11:07.99ID:WU8kpFS10
>>600
mallocをコールした結果スワップすることがあるのは事実
2021/01/23(土) 03:12:25.03ID:WU8kpFS10
pthreadやc++11がデザインパターン?
2021/01/23(土) 07:30:28.10ID:4VL29Q1J0
>>606
>>602
2021/01/23(土) 08:27:23.59ID:WU8kpFS10
>>602
それは実装次第
2021/01/23(土) 08:43:07.74ID:4VL29Q1J0
>>609
だから>>583の様に言い切る奴はアホだ
って話でしょ
2021/01/23(土) 08:50:59.97ID:pbmfU4sr0
>>602
どんな実装でも仮想アドレスに連続領域が確保できなかったらmalloc呼び出し時点で失敗するんじゃないの?
612デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/23(土) 09:44:47.82ID:MUxSQoqh0
>>611
実際にアクセスする時には仮想連続領域があるかもしれないじゃん
613デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/23(土) 09:45:23.82ID:MUxSQoqh0
んで、そんな時こそのスワップですよw
2021/01/23(土) 10:27:22.67ID:4VL29Q1J0
>>611
オーバーレイで仮想空間を拡大する実装かもしれんw
オーバーヘッドがでかすぎるしそもそも今時の環境でそこまでする必要があるとは思えないけど

>>612-612
仮想アドレスと物理アドレスの区別ついてる?
615デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/23(土) 10:29:19.13ID:MUxSQoqh0
>>614
バカなの?
616デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/23(土) 10:31:56.75ID:MUxSQoqh0
>>611
とりあえず割り当てちゃうんだよ
617デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/23(土) 10:36:34.75ID:MUxSQoqh0
アプリとかプログラムのcodeだって全部メモリ上にロードされてないからな、アクセスした時に、あっそこにはプログラム無いから今からロードするわ〜、って感じだから
2021/01/23(土) 12:00:13.95ID:4VL29Q1J0
>>615
ネタに突っ込んでるのか、仮想アドレスも理解できてないことを指摘されて悔しいのかをはっきりさせてくれw
2021/01/23(土) 12:08:04.07ID:sAz3YI3ta
>>616
仮想アドレスに連続した空き領域が足りないのに、とりあえずで何を割り当てるんだよ
2021/01/23(土) 12:15:26.28ID:X7rXBKGs0
メモリーマップトファイルでペタバイトの巨大なプログラムを実行するんだい
2021/01/23(土) 12:55:57.12ID:pbmfU4sr0
>>614
俺にレス?なんか間違ってるか?
2021/01/23(土) 12:57:17.63ID:pbmfU4sr0
>>621
おっと612か。すまんかった
2021/01/23(土) 15:00:04.42ID:E2XTqnevd
>>610
言いきってるように見える?
おれには初心者が「大体こんな感じ?」って言っただけにしか見えないんだけど

意味的には大体合ってるのに
全然違う
とか

最近のOSとしか書いてないんだし

技術的な話をしたいならせめてOSを特定しようよ
勝手に特定のOSを前提にした視野が狭い人みたいだから
2021/01/23(土) 15:27:34.50ID:4VL29Q1J0
>>623
ああ、>>583が言い切ってるは言い過ぎだな
その後の>>586がアホだって言い直すわ
2021/01/23(土) 15:31:32.55ID:E2XTqnevd
いやどう見ても>>584がアホ
2021/01/23(土) 16:34:32.36ID:LPDMRZtK0
スワップファイルが満杯でmallocが失敗なんて状況に陥る前に対策するだろjk
2021/01/23(土) 16:57:50.33ID:5Na5U87Z0
linux って簡単に process 殺すよね
知らんふりも得意
2021/01/23(土) 18:17:32.24ID:4VL29Q1J0
>>625
アホと言うなら具体的にどこがアホって書かないと恥ずかしいだけだぞ
一応ここ技術板だし
629619 (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/24(日) 15:57:31.34ID:5JJAlISZ0
>>619
64bit時代に仮想アドレスに連続した空き領域が無くなることなんか現実に無いだろ
2021/01/24(日) 16:53:19.15ID:0zbFdmBp0
>>629
それなら>>616の時点でそう書けばいいだろう。まあC言語の用途を考えれば後付けで64bitに限った話にしようとするのは馬鹿げているが。
で、>>616のとりあえずって結局何だったの?
631デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/24(日) 17:27:58.38ID:5JJAlISZ0
>>630
常に成功を返す
2021/01/24(日) 17:35:27.66ID:1wsdfsyQ0
実際にアクセスしたときにページフォルト起こしてページを割り当てるとして、そのアドレスに
連続した空きがない状態じゃメモリ割り当てても使えないじゃん。
633デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/24(日) 22:06:29.57ID:5JJAlISZ0
>>632
日本語が変だぞw
634デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/24(日) 22:09:51.26ID:5JJAlISZ0
PFでメモリ割り当てられなきゃ、リスケジューリングだアホ
2021/01/24(日) 22:14:36.76ID:1wsdfsyQ0
割り当てられたとしても使えないと言っているんだが?それとも既に他で使われている領域を上書きするか?
636デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/24(日) 22:18:58.47ID:5JJAlISZ0
>>635
4Kページ割り当てて使えないって何なんだよ・・
2021/01/24(日) 22:24:12.86ID:1wsdfsyQ0
アドレスに連続した空きがない状態だよ。最初からその話をしてるんだろ?
638デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/24(日) 22:28:07.43ID:5JJAlISZ0
>>637
4K+1byte目をアクセスしたらまたPFだから、MMUの勉強したら?
2021/01/24(日) 22:41:44.60ID:1wsdfsyQ0
その4Kの中に要求するサイズの連続領域が取れない場合の話だよ。
いったいなにを「とりあえず」割り当てるんだか。
2021/01/24(日) 23:52:48.21ID:5uhuun5ZK
ページングの話とmallocの領域管理の話がごっちゃになってるな

ページアウトされた領域に空きがあるかどうかはページインしなきゃわからないかもしれないが、そしたら他のページを探しに行くだけ

最終的にどこにも空きがなけりゃmallocがエラーを返す
空き容量が十分あっても希望するサイズの連続領域がないなんてケースは実際にもあり得る
641デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/25(月) 00:08:13.28ID:U3eoM7Fp0
仮想アドレスなんだから使う時まで要らないんだから、mallocは必ず成功する。
昨今のOSは全てそう実装されてる。
2021/01/25(月) 00:11:52.23ID:WuLpUwZU0
オーバーブッキングを平気でするホテルみたいだな
2021/01/25(月) 01:00:15.57ID:8MmNCL2s0
>>641
バカ?
644デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/25(月) 01:17:43.98ID:U3eoM7Fp0
iOSのreusableCellの取得も必ず成功するからforce unwrapできるし
2021/01/25(月) 07:05:04.38ID:HugL0xWrM
>>641
仮想アドレスを使わないOSもあるんだが
まあ安易に「全て」とか使ってるからレス乞食なんだろうな
2021/01/25(月) 08:02:50.43ID:dmbNtT1m0
>>641
勉強しろと言った本人が理解していないのが丸わかり。
使う時まで要らないのは物理メモリであってmallocの時点で仮想アドレスは割り当てなきゃならん。
もし仮想アドレスに空きがなけりゃ「とりあえず割り当てる」なんてのも無理。
2021/01/25(月) 09:02:02.61ID:+X0AlmLXK
実際「mallocは常に成功する」とか根拠なく信じ込んでる奴にはシステム開発は任せられんよ
あとで痛い目みる
2021/01/25(月) 10:01:03.33ID:NuAiBZ6D0
>mallocは常に成功する
Win98SEで失敗したしたことあるわ。
2021/01/25(月) 10:44:35.68ID:MIcmX8A+0
 ハードがMMUで物理的に管理するメモリ上限とか、OSが管理する上限とか、論理上いつか確保出来ない状況は絶対来るの分かっているけれど、そこでエラー起こされると打つ手がない(思い付かない)から、そのまま落ちてもらう。
 俺が知らないだけで、良い回避方法とかあるのかな?
2021/01/25(月) 11:32:21.69ID:ktS6mGMX0
>>649
・ オーバーコミット機能はオフにする
・ malloc (等) がエラーを返すかチェックを怠らない
・ 終了処理にどうしても必要なメモリは事前に確保しておいて他に使わない
2021/01/26(火) 07:53:24.98ID:ZI8ZD6Xld
非常用のメモリを取っとくのは
大昔から当たり前の手法だね
2021/01/26(火) 09:07:24.49ID:7OslGgb50
mallocを信じて生きていけばいいさと 君は叫んだだろう
2021/01/26(火) 10:29:56.18ID:xZCVqJnF0
>>652
https://www.youtube.com/watch?v=dAs2yQUNkdU
2021/01/26(火) 11:06:15.63ID:CnGywsMw0
メモリ不足だと表示して終了しちゃいかんのか?
2021/01/26(火) 11:51:32.15ID:xZCVqJnF0
>>654
それでいい状況ならそれでいいんだよ。
それじゃ駄目なときの話をしてる。
2021/01/26(火) 12:18:24.13ID:nusF9BATd
車を運転してたら
「メモリ不足です」と表示されてブレーキが効かなくなった

冷蔵庫が「メモリ不足です」と表示されて止まっていた

ああメモリ不足ならしょうがない
って思う人いるかな?
2021/01/26(火) 12:24:58.20ID:qqWW8hOx0
航空機搭載システムなんかは動的メモリ割り当て自体を禁止してるそうな
でもアルゴリズムによっては動的メモリ割り当てが本質的なこともあるだろうし
事前割り当てしたところで、自前でmymallocを実装するってだけな気はするし
ミッションクリティカルなアプリがどうやってるかはちゃんと調べないと判らんね
2021/01/26(火) 12:29:47.88ID:nusF9BATd
航空機なんて特別な例を出さなくても
身の回りの電気製品でソフト要因のエラーが許される物なんてなかなか無いような気がする
2021/01/26(火) 12:41:48.87ID:Ab88y5Cj0
>>657
オーバーフローは危険なのでスタックの使用も禁止します
2021/01/26(火) 12:49:59.07ID:nusF9BATd
条件を満たせは静的解析でスタック使用量はわかる
整数型はオーバーフローして危険だから禁止
2021/01/26(火) 13:32:22.24ID:xZCVqJnF0
そういえば何の事例だったかでループも禁止 (停止性の証明が難しいので) とかいうのは聞いたことがあるな。
2021/01/26(火) 13:33:43.60ID:cSn18yXwM
>>659
再帰禁止とか組み込みなら珍しくないぞ
2021/01/26(火) 14:31:35.84ID:46etcFxHd
>>661
ループ禁止でコードを組める気がしないのだが
処理したらCPUリセットするの?

ループ以外に何か禁止な条件があるはず
2021/01/26(火) 14:35:21.22ID:46etcFxHd
ヒープ禁止は普通にある
禁止というかそもそもヒープ用にメモリが無いとか
設計方針でヒープモジュールを搭載しないとか
あとは確保オンリーなヒープってのもある

PICとかだとハード的に再帰が難しいとか
665デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/26(火) 21:31:25.38ID:INqgRhQd0
JALの航空管制制御のプログラム作ったことあるけど、
1ルーチンコードサイズ4KBまでIBM3090アセンブラ
ループ処理などなく、また呼ばれる
可愛い平さん元気かなぁ・・
666デフォルトの名無しさん (ワッチョイ 8701-Dpoh)
垢版 |
2021/01/26(火) 21:32:25.57ID:INqgRhQd0
手塚さんとかも綺麗だったな・・おれまだ学生だったw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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