■ このスレッドは過去ログ倉庫に格納されています
C言語なら俺に聞け 153
- 1 :デフォルトの名無しさん :2019/08/17(土) 23:02:42.00 ID:tN5mSQYg0.net
- 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/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 152
https://mevius.5ch.net/test/read.cgi/tech/1560763630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 952 :デフォルトの名無しさん :2020/01/11(土) 17:46:53.86 ID:AmOO0hUd0.net
- >>950
とりあえずお前はCに留まってろ
話はそれだけだ
- 953 :デフォルトの名無しさん :2020/01/11(土) 17:53:57.75 ID:DoM09T/H0.net
- 有名なリーナスのコピペだろ
- 954 :デフォルトの名無しさん :2020/01/11(土) 22:53:33.52 ID:AUXeR2Nj0.net
- 初心者がC++を使うのはクラスが便利とかではなくて便利そうなライブラリを引っ張てこれるからだろう。
- 955 :デフォルトの名無しさん :2020/01/11(土) 22:55:44.33 ID:maKKMM+r0.net
- 便利そうなライブラリを引っ張ってこれる時点でプログラミング初心者ではないし
そもそもC++から始めるプログラミング初心者とか存在すんのか?
- 956 :デフォルトの名無しさん :2020/01/11(土) 23:26:05.56 ID:PA1VQQuv0.net
- >>947
NANDだけだな
- 957 :デフォルトの名無しさん :2020/01/11(土) 23:31:10.93 ID:r5wulSj/0.net
- 単純に便利だからじゃないの。
- 958 :デフォルトの名無しさん :2020/01/12(日) 01:47:15.90 ID:yxPPqVVq0.net
- >>956
そうなんだ
- 959 :デフォルトの名無しさん :2020/01/12(日) 01:51:46.75 ID:HwD03+Q90.net
- 笑って良いか?w
- 960 :蟻人間 :2020/01/12(日) 02:18:33.81 ID:1G/fBof90.net
- いいとも!
- 961 :デフォルトの名無しさん :2020/01/12(日) 03:10:59.78 ID:Svv4a/Ag0.net
- gccコンパイルしたんだが今どきのgccってC++で書かれてるんだな
恥ずかしながらつい最近まで知らんかった
- 962 :デフォルトの名無しさん :2020/01/12(日) 07:25:04.57 ID:t6zFaymS0.net
- >>947
でも日本は失敗したんだよね。
- 963 :デフォルトの名無しさん :2020/01/13(月) 14:02:27.58 ID:JUx858UH0.net
- 質問です。32bitで確保できるメモリの上限近く(windowsなので1.5GBとか)を
色々なデータで確保した後、いっきに半分以上解放し、またいっきに色々なデータで
上限近く確保しようとするとmalloc()が失敗します(NULLを返す)。
プロセスのメモリを見ても500MBくらいまで落ちてから再確保しているようですがダメです。
これは内部で何が起こっているのでしょうか?断片化とかでしょうか??
- 964 :963 :2020/01/13(月) 14:50:30.36 ID:JUx858UH0.net
- 追加ですが殆どのデータを解放して使用量50MBくらいにしてから
しばらく待ってから再確保すると上手く行くようです。ただ500〜1000MBくらい残してから
また上限近くまで確保しようとすると失敗します。何故でしょうか?
- 965 :蟻人間 :2020/01/13(月) 15:39:54.87 ID:xgMgrp400.net
- よくわからんけど、ヒープメモリの仕組みを調べるといいかも。
- 966 :デフォルトの名無しさん :2020/01/13(月) 15:42:12.61 ID:WUoSHY6Y0.net
- アリ人間は何故なまえを変えたのか。
- 967 :デフォルトの名無しさん :2020/01/13(月) 15:47:05.97 ID:5GjUS2iX0.net
- フラグメント
断片化
アドレス空間2GBの壁
諦めなさい
- 968 :デフォルトの名無しさん :2020/01/13(月) 15:54:23.75 ID:5GjUS2iX0.net
- 極端な例
256MBのメモリを8個確保 (2GB分) したあと
1, 3, 5, 7個目を解放
この状態だと
1GB空きがあるのに
連続で空いてるのは256MB
だから512MBの確保に失敗する
- 969 :デフォルトの名無しさん :2020/01/13(月) 16:31:54.68 ID:axFuJyFlF.net
- 断片化だろ
しばらく待つことに何の意味も無い
- 970 :963 :2020/01/13(月) 16:37:34.93 ID:JUx858UH0.net
- >>967-969
やっぱり断片化ですか… 一旦使用量50MBまで減らしたら
断片化がかなり無くなったので確保が上手く行ったという事になりますかね。
更にうまくメモリ管理するか64bit化も考えようと思います。ありがとうございました。
- 971 :デフォルトの名無しさん :2020/01/13(月) 17:38:12.46 ID:axFuJyFlF.net
- 細切れにならないように自分ででかく確保して
その中をさらに自分で管理すると良い
- 972 :デフォルトの名無しさん :2020/01/13(月) 19:01:20.39 ID:JUx858UH0.net
- >>971
もっと効率よくやるならその方法がやっぱいいですね。ありがとうございます。
- 973 :デフォルトの名無しさん :2020/01/13(月) 22:56:26.88 ID:ke+wtNqb0.net
- そこまで大きいデータならオンメモリで処理する手段は捨てるなあ
間違えて数GBのISOファイル読み込んじゃってPC固まったとかそういう挙動は許されざるよ
- 974 :デフォルトの名無しさん :2020/01/13(月) 23:07:18.29 ID:Yl8Am7cI0.net
- 無理に32ビットでやらなくても良いのではないか?
- 975 :デフォルトの名無しさん :2020/01/14(火) 11:56:44.05 ID:AM8t1N0H0.net
- 要するにブロックを詰めるパズルゲームだろ
- 976 :デフォルトの名無しさん :2020/01/14(火) 16:16:37.73 ID:MAaOflfD0.net
- メモリをポインタではなくハンドルで管理すれば
メモリコンパクションができる
ただし、そんなことをしなくても実容量を超えるメモリが提供できるようにするために仮想記憶があるんだが
- 977 :デフォルトの名無しさん :2020/01/14(火) 16:30:41.75 ID:RxBpnTJ90.net
- 実容量を超えるメモリーを使いたいだけならオーバーレイとかセグメント方式のメモリー管理機構とか色々あるが
- 978 :デフォルトの名無しさん :2020/01/14(火) 17:25:51.38 ID:Ae/uveiQ0.net
- >>976-977
32bitプログラムだとメモリ空間が最大でも4GBしか扱えないので
それ以上は無理ではないでしょうか?扱える方法何かあるでしょうか?
- 979 :デフォルトの名無しさん :2020/01/14(火) 17:28:42.27 ID:Cb2SImdL0.net
- あるけど
- 980 :蟻人間 :2020/01/14(火) 17:37:38.20 ID:JKuyIKmvd.net
- メインメモリとは別の記憶媒体に退避しておけば、実質使える?かな?
- 981 :デフォルトの名無しさん :2020/01/14(火) 17:46:20.96 ID:SgRnb4BR0.net
- >>978
その理屈だと、4GBを超えるファイルは扱えなくことになる
- 982 :デフォルトの名無しさん :2020/01/14(火) 18:01:20.77 ID:vjAz2zAO0.net
- 32bit Windows の普通のプロセスのアドレス空間は2GB
OSやAPIを改造してFARポインタを扱えるようにするか
ロックアンロック方式のメモリ管理を自力で実装するか
そんなことをするよりは
素直にアプリのメモリ確保の方法を変えるのが早い
もちろん64bit化出来るならそれが一番
- 983 :デフォルトの名無しさん :2020/01/14(火) 18:05:55.14 ID:RxBpnTJ90.net
- >>978
オーバーレイは同じメモリー空間のデータ/プログラムを入れ替えて実行する機能
メモリー空間の話であればバンク切替とかもあるし
- 984 :デフォルトの名無しさん :2020/01/14(火) 18:13:13.94 ID:Ae/uveiQ0.net
- >>982
どうしても使ってる一部のライブラリが32bitで64bit化するのが無理でした。
>>983
そちらを調べてみようと思います。
- 985 :デフォルトの名無しさん :2020/01/14(火) 18:15:32.64 ID:Ae/uveiQ0.net
- >>980-981
そうやっても必要な時にメインメモリに読み込んで使う必要がないですかね?
しかも上手くやりくりして読み込んでもそこで断片化の問題もありますし。
その場合プールを自分で管理するしかなさそうな気がします。途中でその話をしてましたが。
- 986 :デフォルトの名無しさん :2020/01/14(火) 18:31:15.17 ID:jSZPoIDP0.net
- 32bitOSで4GB以上のオブジェクトをメモリに読み込んでどうにかしろ、と言われたら。
最初に検討するのはファイルマッピングだろうなあ。それ以外だとやる気がおきない。
APIを叩く必要があるので、WindowsならCreateFileMappingとかMapViewOfFileとか。
- 987 :デフォルトの名無しさん :2020/01/14(火) 18:32:25.86 ID:Ae/uveiQ0.net
- >>986
ありがとうございます。調べてみますね。
- 988 :デフォルトの名無しさん :2020/01/14(火) 18:32:29.78 ID:RxBpnTJ90.net
- >>984
> そちらを調べてみようと思います。
いやいや、オーバーレイとかバンク切替とかは半分ネタだから今更そんなもん調べなくていいよw
>>985
> しかも上手くやりくりして読み込んでもそこで断片化の問題もありますし。
アホほどでかいサイズでなきゃそれほど問題にならないよ
> その場合プールを自分で管理するしかなさそうな気がします。途中でその話をしてましたが。
どうしてもでかい領域を確保/解放する必要あるならそれしかないように思う
- 989 :蟻人間 :2020/01/14(火) 18:39:12.20 ID:JKuyIKmvd.net
- どうしてそんなデカいデータが必要なんだろう。遺伝子情報でも操作してんのかな?
- 990 :デフォルトの名無しさん :2020/01/14(火) 18:41:07.63 ID:Ae/uveiQ0.net
- >>988
>いやいや、オーバーレイとかバンク切替とかは半分ネタだから〜
ネタでしたかw 了解しました。
>アホほどでかいサイズでなきゃそれほど問題にならないよ
細かいのと途中で500MBくらいを二つとかがあるので時々断片化のせいでmallocが失敗するんですよねえ…
>どうしてもでかい領域を確保/解放する必要あるならそれしかないように思う
とりあえず作業領域様に500MBの領域を確保して再利用すると他の部分でmalloc失敗はなかったですね。
仰るように小さい領域はかなり確保しても問題にならないですね。大きな領域用にメモリスペースを予め確保しておく方法がよいかもしれないと思いました。
- 991 :デフォルトの名無しさん :2020/01/14(火) 18:45:58.67 ID:SgRnb4BR0.net
- >>990
メモリーマップドは、かなり癖があるから注意して使った方がいいよ
ロジックなどの作りは簡単になるけど、
下手をすると処理が一日で終わらないなんて平気で起きる
- 992 :デフォルトの名無しさん :2020/01/14(火) 18:48:32.63 ID:iQtyfXTR0.net
- もう64bitが当たり前になってかなり経つ昨今、そんな案件ごろごろある
映像をリアルタイムでごにょごにょとか言われたら簡単にギガ単位のメモリ使う
稀有な例では無いけど32bit環境でやれって言われたらヤダナとは思う
- 993 :デフォルトの名無しさん :2020/01/14(火) 18:55:05.49 ID:Ae/uveiQ0.net
- >>991
そうなんですね。了解しました。
>>989 >>992
詳細はあまり言えないのですがメモリ中に
動画データを一部展開しなければいけなくて
メモリ不足や断片化の問題で困ってました。
しかも周辺で使ってるライブラリが32bitで64bit化が難しくて。
- 994 :蟻人間 :2020/01/14(火) 19:02:49.75 ID:JKuyIKmvd.net
- そろそろ次スレ
- 995 :デフォルトの名無しさん :2020/01/14(火) 19:20:01.41 ID:2s3ZuCDc0.net
- 8k240Hz動画だと1秒キャッシュするだけでメモリ消費24GBか
まあ今時わざわざCを使うなんて極限環境だけだからそういうこともあるよね
- 996 :デフォルトの名無しさん :2020/01/14(火) 19:23:27.41 ID:SgRnb4BR0.net
- >>992
無理かどうか分からないけれど、その32ビットの処理だけ抜き出して
外部プログラムにし、処理結果を受けとるみたいには出来ないのかな?
- 997 :デフォルトの名無しさん :2020/01/14(火) 19:27:10.09 ID:Ae/uveiQ0.net
- >>996
せめてDLLが別のプロセスモードとかで動いてくれればいいんですが…
よい案がないか引き続き考えてみますー
- 998 :デフォルトの名無しさん :2020/01/14(火) 19:33:22.57 ID:SgRnb4BR0.net
- 次すれ、立てました
https://mevius.5ch.net/test/read.cgi/tech/1578997950/
- 999 :デフォルトの名無しさん :2020/01/14(火) 19:45:37.22 ID:MAaOflfD0.net
- >>978
ちょっと待てや
おまえ単一仮想記憶を前提に話してるか?
今や多重仮想記憶が当たり前で単一仮想記憶はかなり特殊な存在だぞ
- 1000 :デフォルトの名無しさん :2020/01/14(火) 19:50:12.26 ID:gkNCY9ap0.net
- for (int i = 0; i < 1000; i++) {
puts("1000");
}
- 1001 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1001
240 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★