2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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 ★