!extend:checked:vvvvv:1000:512
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言語なら俺に聞け 151
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cf8f-fy95)
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0 >>374
Java ならば boxing でヒープにとる値とスタックに取る値とをある程度(意識せずに)変換できますね(そういう C/C++ like な意識が皆無ではない、という意味)
ただし、二分木に関してはいいたいことがまだあって、「本物の」二分木は二重ポインタ(ポインタのポインタ)が必要なのではないか?と思っています
さすがに Java には二重ポインタはない、そんな用途の言語じゃない
Python や ruby にはあるのでしょうか?
Java ならば boxing でヒープにとる値とスタックに取る値とをある程度(意識せずに)変換できますね(そういう C/C++ like な意識が皆無ではない、という意味)
ただし、二分木に関してはいいたいことがまだあって、「本物の」二分木は二重ポインタ(ポインタのポインタ)が必要なのではないか?と思っています
さすがに Java には二重ポインタはない、そんな用途の言語じゃない
Python や ruby にはあるのでしょうか?
376デフォルトの名無しさん (アウアウエー Sa3a-3iRC)
2019/05/04(土) 20:55:58.63ID:cZ5M6KFWa 二重ポインタを何に使う?
Cだと引数でノードのオブジェクトを返す辺りか?
Cだと引数でノードのオブジェクトを返す辺りか?
>>376
ノードを追加する関数add の引数を
add(&root, Object)
ってするでしょ?&root ってことは、struct *node のアドレス、すなわち struct node ** が必要なのではないかと
ノードを追加する関数add の引数を
add(&root, Object)
ってするでしょ?&root ってことは、struct *node のアドレス、すなわち struct node ** が必要なのではないかと
378デフォルトの名無しさん (アウアウエー Sa3a-3iRC)
2019/05/04(土) 21:43:09.25ID:cZ5M6KFWa >>377
わからんが、Cでも戻り値でポインタを返せばいいんじゃないか?
わからんが、Cでも戻り値でポインタを返せばいいんじゃないか?
379はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
2019/05/04(土) 21:46:08.02ID:21Of2ELD0 >>375
参照を持つオブジェクトへの参照を持てるんだから、事実上の二重ポインタとして使えるよ。
参照を持つオブジェクトへの参照を持てるんだから、事実上の二重ポインタとして使えるよ。
380デフォルトの名無しさん (ワッチョイ bb87-ahOC)
2019/05/04(土) 21:57:52.42ID:8Q7/PMC20 二重までは使うんだよなあ
三重をなぜ使わないか、説明できるか?w
三重をなぜ使わないか、説明できるか?w
381デフォルトの名無しさん (ワッチョイ d701-o1CB)
2019/05/04(土) 22:09:57.55ID:RtDHzLy60 ガベージコレクションと裸のポインタって相性が悪いような
382デフォルトの名無しさん (ワッチョイ e201-VrjD)
2019/05/04(土) 22:15:35.23ID:eVIwB2YR0 >>378
2個返したい時とか、戻り値は成功かどうかのコードを返したいとか
2個返したい時とか、戻り値は成功かどうかのコードを返したいとか
383デフォルトの名無しさん (アウアウエー Sa3a-3iRC)
2019/05/04(土) 23:07:46.23ID:cZ5M6KFWa 道はいろいろあると思うが、せっかくあるんだから構造体使って皆くるんじゃえと思うよ。
384デフォルトの名無しさん (アウアウウー Sabb-vI8p)
2019/05/05(日) 00:20:41.66ID:nwgMKC8Ra 微妙にスレチのように思うので続きはJava初心者のスレでやった方が良いのではないか?
まあ人に聞かなくても Java を勉強して Java の API のソースを読めばそういうのをどうしているのかは何れわかると思うけどね。
まあ人に聞かなくても Java を勉強して Java の API のソースを読めばそういうのをどうしているのかは何れわかると思うけどね。
385デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
2019/05/05(日) 00:21:53.66ID:tvdtPjB+0 Ruby での、Jaggy 配列は、
ary = [ ] # 配列の配列
ary.push [ "a" ]
ary.push [ 1, 2 ]
p ary #=> [["a"], [1, 2]]
C/C++ 以外のたいていの言語では、数字などのprimitive 以外は、すべて参照。
(primitiveは参照にするよりも、その場所へ値を埋め込んだ方が速い)
外側の配列は、内側の配列の参照を持っている。
内側の配列は、(primitive以外の)各要素の参照を持っている
primitive以外は、コピーしても参照がコピーされるだけで、値はコピーされない。
つまり、同一インスタンスを指す。
別のインスタンスは作られない
new されていなければ、インスタンスは作られない。
代入しただけでは、参照がコピーされるだけ
これを、shallow copy (浅いコピー)と呼ぶ(同一インスタンス)。
new して、別のインスタンスを作ることを、deep copy (深いコピー)と呼ぶ(別のインスタンス)
ary = [ ] # 配列の配列
ary.push [ "a" ]
ary.push [ 1, 2 ]
p ary #=> [["a"], [1, 2]]
C/C++ 以外のたいていの言語では、数字などのprimitive 以外は、すべて参照。
(primitiveは参照にするよりも、その場所へ値を埋め込んだ方が速い)
外側の配列は、内側の配列の参照を持っている。
内側の配列は、(primitive以外の)各要素の参照を持っている
primitive以外は、コピーしても参照がコピーされるだけで、値はコピーされない。
つまり、同一インスタンスを指す。
別のインスタンスは作られない
new されていなければ、インスタンスは作られない。
代入しただけでは、参照がコピーされるだけ
これを、shallow copy (浅いコピー)と呼ぶ(同一インスタンス)。
new して、別のインスタンスを作ることを、deep copy (深いコピー)と呼ぶ(別のインスタンス)
386デフォルトの名無しさん (ワッチョイ 8252-M0pk)
2019/05/05(日) 00:37:14.86ID:RPhfdkos0 >>385
馬鹿は消えろ
馬鹿は消えろ
>>378
それは無駄な代入が発生するでしょう?
それは無駄な代入が発生するでしょう?
>>380
余裕で三重ポインタなどほいほいと使いますよ
https://mevius.5ch.net/test/read.cgi/tech/1434079972/26
void prep_exe(char *sttp, char **path, char ***argv)
char **argv を使うことが理解できるのだったら「argv のアドレスを渡す」みたいな場合に渡された関数側では三重ポインタを使うことになるでしょう
余裕で三重ポインタなどほいほいと使いますよ
https://mevius.5ch.net/test/read.cgi/tech/1434079972/26
void prep_exe(char *sttp, char **path, char ***argv)
char **argv を使うことが理解できるのだったら「argv のアドレスを渡す」みたいな場合に渡された関数側では三重ポインタを使うことになるでしょう
389デフォルトの名無しさん (ワッチョイ 9b6d-ahOC)
2019/05/05(日) 09:04:36.94ID:hoO1o10+0 >>388
それcodepadだろ? 使いさえすればいいって話じゃなくて
それcodepadだろ? 使いさえすればいいって話じゃなくて
>>389
無論使いさえすればいい、というわけではなく、この例では小さなシェルを実装しており、シェルのパイプ機能を実装するのに三重ポインタを使ったのです
無論使いさえすればいい、というわけではなく、この例では小さなシェルを実装しており、シェルのパイプ機能を実装するのに三重ポインタを使ったのです
391デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 09:21:39.41ID:2T/oydys0 >>387
引数を介すと代入が減るってこと?
引数を介すと代入が減るってこと?
393デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/05(日) 10:05:07.93ID:bV6goPu10 呼び出しの前後で、ptrの値が 同じかもしれない、場合よっては変わるかもしれない関数
ptr = func1(ptr, opt); と func2(&ptr, opt);
うーんどっちも使うな…
ptr = func1(ptr, opt); と func2(&ptr, opt);
うーんどっちも使うな…
394デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 10:28:11.80ID:2T/oydys0 >>392
じゃあ、一時変数に代入しとけば?
じゃあ、一時変数に代入しとけば?
>>394
シンプルな記述ができるのに、わざと複雑な書き方にするのは問題なのでは?
シンプルな記述ができるのに、わざと複雑な書き方にするのは問題なのでは?
397デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 10:32:32.58ID:2T/oydys0399デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/05(日) 10:35:01.06ID:bV6goPu10 エラー伝達に NULL を使う realloc は即代入するとお漏らししちゃうし
あれ、なん引数書き戻しにしなかったんだろう? 素朴な疑問
あれ、なん引数書き戻しにしなかったんだろう? 素朴な疑問
400デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 10:35:57.12ID:2T/oydys0 >>398
代入されているのかされていないのか、わからない方が良いってこと?
代入されているのかされていないのか、わからない方が良いってこと?
401デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/05(日) 10:36:08.55ID:bV6goPu10 ×あれ、なん引数書き戻しに
○あれ、なんで引数書き戻しに
○あれ、なんで引数書き戻しに
402デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 10:41:29.60ID:2T/oydys0404デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 11:31:24.71ID:2T/oydys0 >>403
だから、関数の内部的に何してるのかわからんのが良いってことじゃない?
だから、関数の内部的に何してるのかわからんのが良いってことじゃない?
406デフォルトの名無しさん (スプッッ Sd22-ph/v)
2019/05/05(日) 11:38:01.66ID:orE8GGyod >>406
非常に大きな二分木(ノートが1億個)があって、そのはるか先端で malloc() してそこで代入すればいいだけなのに、
その先端から root に戻ってくる途中の30箇所ほどで、軒並み全部のノードで「必要のない無駄な代入」をするのですか?
>それしか使えない場面でのみ使うべき
この二分木を実装する、というのがまさしく「それしか使えない場面」なのですよ
非常に大きな二分木(ノートが1億個)があって、そのはるか先端で malloc() してそこで代入すればいいだけなのに、
その先端から root に戻ってくる途中の30箇所ほどで、軒並み全部のノードで「必要のない無駄な代入」をするのですか?
>それしか使えない場面でのみ使うべき
この二分木を実装する、というのがまさしく「それしか使えない場面」なのですよ
408デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 11:45:42.03ID:2T/oydys0 >>405
つまり、後者でmallocしてnullが返った時はそれを代入するってことですか?同じじゃん。
つまり、後者でmallocしてnullが返った時はそれを代入するってことですか?同じじゃん。
409デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 11:47:06.67ID:2T/oydys0412デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 11:57:28.30ID:2T/oydys0413デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 11:58:36.27ID:2T/oydys0 >>411
代入回数比較してよ。頼むよ。
代入回数比較してよ。頼むよ。
>>412
ちがいますね
問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっています。
>>413
>>407 に書いておきました、1億ノードの二分木にて各ノードが最適に配置されているとして、削ることのできる代入は malloc() 一回に対して 30 個の代入になります
>>393 ptr = func1(ptr, opt); では 1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
代入のコストは大したことがない、にしても、アルゴリズムを正確に記述できないのは問題ですね
洗練された記述とはそういうものではないでしょうか
ちがいますね
問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっています。
>>413
>>407 に書いておきました、1億ノードの二分木にて各ノードが最適に配置されているとして、削ることのできる代入は malloc() 一回に対して 30 個の代入になります
>>393 ptr = func1(ptr, opt); では 1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
代入のコストは大したことがない、にしても、アルゴリズムを正確に記述できないのは問題ですね
洗練された記述とはそういうものではないでしょうか
415デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 12:48:51.19ID:2T/oydys0416デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 12:52:54.83ID:2T/oydys0 仕事では戻り値に成功失敗が入ってオブジェクトのポインタは引数に来るような関数は使うけどさ、
結局どっちもチェックするよ。信じられねえもんな。
結局どっちもチェックするよ。信じられねえもんな。
>>415
malloc() が成功したか失敗したかは、今の話には関係ありません
今関係があるのは、
malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@
です
malloc() が成功したか失敗したかは、今の話には関係ありません
今関係があるのは、
malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@
です
418デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 13:42:25.11ID:2T/oydys0420デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 13:55:35.88ID:2T/oydys0 >>419
戻り値はvoidってこと?
戻り値はvoidってこと?
422デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/05(日) 14:08:06.37ID:2T/oydys0 >>421
いや、必須なのでは?
いや、必須なのでは?
424デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/05(日) 14:33:08.37ID:bV6goPu10 異常は戻りをNULLにするパティーンで
node_t *func3(node_t**, ...)
正常だった場合に ptr = func3(&ptr, opt); と書けるしw (無駄な努力の可能性
node_t *func3(node_t**, ...)
正常だった場合に ptr = func3(&ptr, opt); と書けるしw (無駄な努力の可能性
425デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/05(日) 14:34:34.27ID:bV6goPu10 って書いたけど鼻から悪魔踏みそうな嫌らしさがあるな…
>>424
そのパターンでは、異常値 NULL をうっかりノードに登録してしまうと、そのノードより下が浮いてしまい危ないですね、ま、異常系をミスったままリリースしてしまうことも私はよくやりますけど
そのパターンでは、異常値 NULL をうっかりノードに登録してしまうと、そのノードより下が浮いてしまい危ないですね、ま、異常系をミスったままリリースしてしまうことも私はよくやりますけど
427デフォルトの名無しさん (アウアウカー Sa47-3iRC)
2019/05/05(日) 15:42:24.13ID:8x8syc+Fa >>423
いや、必須でしょ?代入消せるんだから。消さないと。
いや、必須でしょ?代入消せるんだから。消さないと。
429デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/05(日) 18:13:23.13ID:bV6goPu10 423の文意は
「void が必須なわけではなく
引数と同じ型のポインタを戻すことはせずに、別の目的の何か、たとえばエラーコードとして int を戻す
なんてのはアリでしょ?」
ってことだと思うけど
「void が必須なわけではなく
引数と同じ型のポインタを戻すことはせずに、別の目的の何か、たとえばエラーコードとして int を戻す
なんてのはアリでしょ?」
ってことだと思うけど
430デフォルトの名無しさん (アウアウエー Sa3a-3iRC)
2019/05/05(日) 18:42:49.42ID:dOx23ziba returnしちゃだめでしょ
代入が駄目ってくらいだから
代入が駄目ってくらいだから
431デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/05(日) 18:56:43.02ID:bV6goPu10 「代入不要なケースでも代入記述を要求するのはよろしくない」スタイルの延長だと
戻り値評価も破棄可能ならそうすべき って話か
戻り値評価も破棄可能ならそうすべき って話か
434はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
2019/05/05(日) 19:13:46.27ID:TxpPZKKr0 あ、ごめん、ミスって文章を書く前に投稿してもうた。
>>407
あらためて確認するが、この代入を「無駄」としているのはアルゴリズムの表現の上では不要なことをしているという
意味の上での無駄であって、性能上の無駄という意味ではないんだね?
そして、アルゴリズムを正しく表現する上では (ときには二重・三重のも含めて) ポインタが必要だと。
>>407
あらためて確認するが、この代入を「無駄」としているのはアルゴリズムの表現の上では不要なことをしているという
意味の上での無駄であって、性能上の無駄という意味ではないんだね?
そして、アルゴリズムを正しく表現する上では (ときには二重・三重のも含めて) ポインタが必要だと。
>>434
>性能上の無駄という意味ではないんだね?
性能の上で分析するとなると、間接参照にてデータをロード、ストアするコストと値をストアするコストを天秤にかける、ことになりますね
なるほど、その点を言いたくて、でも言いたくなくて、しつこく絡んでいたのですか…
私は二重ポインタでの表現の方がトータルでお得だ、とは思ってはいますが、これまで表に出ている私の発言は、あえてそこには踏み込まず(だって性能の話はうかつに断言できませんからね…)、
おっしゃるとおり「アルゴリズムの表現の上では不要なことをしている」に留まっています
>性能上の無駄という意味ではないんだね?
性能の上で分析するとなると、間接参照にてデータをロード、ストアするコストと値をストアするコストを天秤にかける、ことになりますね
なるほど、その点を言いたくて、でも言いたくなくて、しつこく絡んでいたのですか…
私は二重ポインタでの表現の方がトータルでお得だ、とは思ってはいますが、これまで表に出ている私の発言は、あえてそこには踏み込まず(だって性能の話はうかつに断言できませんからね…)、
おっしゃるとおり「アルゴリズムの表現の上では不要なことをしている」に留まっています
436はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
2019/05/05(日) 20:57:45.43ID:TxpPZKKr0 >>435
たとえば数学上の表記なら「A=1 であり B=1 のとき A=B は真である」と「1=1 は真である」には何も差が無い。
途中で名前を付けるのは人間に対する便宜であって、無駄な「操作」は存在しない。
代入が無駄たりうるのは C のパラダイムだからなので、
「C で表現するにはポインタが必要だし、代入では不適当だ」は事実であっても
「ポインタが無い言語では表現できない」というわけではないよ。
C の低級な世界でまともな意味論を表現しようとするのがそもそもの間違いだろう。
たとえば数学上の表記なら「A=1 であり B=1 のとき A=B は真である」と「1=1 は真である」には何も差が無い。
途中で名前を付けるのは人間に対する便宜であって、無駄な「操作」は存在しない。
代入が無駄たりうるのは C のパラダイムだからなので、
「C で表現するにはポインタが必要だし、代入では不適当だ」は事実であっても
「ポインタが無い言語では表現できない」というわけではないよ。
C の低級な世界でまともな意味論を表現しようとするのがそもそもの間違いだろう。
>>436
>「ポインタが無い言語では表現できない」というわけではないよ。
それは理解しています、なぜなら
Java での二分木の実装を検討したことがある(探せば2ch過去ログにあるかもしれません)
Java にはポインタはありませんが、実装できるかできないか、といえば「できる」の方に入りますね
>「ポインタが無い言語では表現できない」というわけではないよ。
それは理解しています、なぜなら
Java での二分木の実装を検討したことがある(探せば2ch過去ログにあるかもしれません)
Java にはポインタはありませんが、実装できるかできないか、といえば「できる」の方に入りますね
438はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
2019/05/05(日) 21:54:26.85ID:TxpPZKKr0439デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
2019/05/05(日) 23:34:40.25ID:RXFRr1FQ0 C言語のプログラム内で確保していいメモリってユーザー空間の仮想メモリ上限いっぱいまで取っていいの?
複数の変数a, b, c, ・・・の値を表示するだけのプログラムを時系列に並べて考えてみるんだけど
0. 実行ファイルを起動する
1. 32bitプロセスが生成される ←たとえば32bit windowsだとユーザー空間とカーネル空間で計4GBの仮想メモリが確保される
2. int a; ←仮想メモリ(1で確保されたユーザー空間)上にaが確保される
int b; ←上に類似
int c; ←上に類似
・・・・・(複数の変数の宣言やprintf関数が続く)
こんな感じなんだろうけど
上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
複数の変数a, b, c, ・・・の値を表示するだけのプログラムを時系列に並べて考えてみるんだけど
0. 実行ファイルを起動する
1. 32bitプロセスが生成される ←たとえば32bit windowsだとユーザー空間とカーネル空間で計4GBの仮想メモリが確保される
2. int a; ←仮想メモリ(1で確保されたユーザー空間)上にaが確保される
int b; ←上に類似
int c; ←上に類似
・・・・・(複数の変数の宣言やprintf関数が続く)
こんな感じなんだろうけど
上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
440はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
2019/05/05(日) 23:38:14.20ID:TxpPZKKr0 >>439
いいけど、もっと効率的な方法があるならそれに越したことは無いっていうそれだけの話
いいけど、もっと効率的な方法があるならそれに越したことは無いっていうそれだけの話
441デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
2019/05/05(日) 23:41:29.98ID:RXFRr1FQ0 簡潔に書くと
安全のためにはどこまでメモリを使っていいの?
そのメモリの大きさはユーザー空間の上限と同じなの?
という室問なのに長くなってしまた
安全のためにはどこまでメモリを使っていいの?
そのメモリの大きさはユーザー空間の上限と同じなの?
という室問なのに長くなってしまた
442デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
2019/05/05(日) 23:47:50.76ID:RXFRr1FQ0 >>440
ありがとう
ただ初心者なので効率性を目指すにはきつい部分が出てくる
そうなるとメモリの残量を監視する、つまり残量の値を取得する必要があるわけだけど
これは一般的にはwindowsのAPIを使うのが普通なの?
(そんなものがあるのかは知らない)
ありがとう
ただ初心者なので効率性を目指すにはきつい部分が出てくる
そうなるとメモリの残量を監視する、つまり残量の値を取得する必要があるわけだけど
これは一般的にはwindowsのAPIを使うのが普通なの?
(そんなものがあるのかは知らない)
443デフォルトの名無しさん (ワッチョイ 8252-M0pk)
2019/05/05(日) 23:52:54.47ID:RPhfdkos0 >>442
スタックとヒープという概念は知ってる?知らなければまずそれを調べてみて。
それと、初心者なら効率を求める前に正しくメモリ管理を扱えるようになる必要があるが、その時点で残量は気にする必要はないぞ。
スタックとヒープという概念は知ってる?知らなければまずそれを調べてみて。
それと、初心者なら効率を求める前に正しくメモリ管理を扱えるようになる必要があるが、その時点で残量は気にする必要はないぞ。
444デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
2019/05/05(日) 23:59:16.82ID:RXFRr1FQ0 FIFOだとかナントカ程度にしか。
「〜〜領域」という幾つかの用語がOSとかの環境が違っても
全く共通のものなのかよく分からないから正直スルーしてる
「〜〜領域」という幾つかの用語がOSとかの環境が違っても
全く共通のものなのかよく分からないから正直スルーしてる
445デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
2019/05/06(月) 05:38:27.60ID:wr9bFPpT0 >>414
>1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
2^10 = 約1,000 千
2^20 = 約1,000,000 百万
2^30 = 約1,000,000,000 十億
>>441
Java VM の初期値は、256MB とか。
それよりも大きいと強制終了されるが、起動時に、512MBに設定できる
たぶん、4GB の仮想メモリでも、ユーザー空間3GB・カーネル空間1GBぐらいだろ
それ以上のデータは、動画みたいにstream になる。
バッファサイズ、例えば、1MB を読んでは捨てて、次の1MB読んでは捨てて、の繰り返し
読み込んだデータを使ったら、すぐに捨てないといけない。
ユーザー空間に、空きを作らないといけない
>1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
2^10 = 約1,000 千
2^20 = 約1,000,000 百万
2^30 = 約1,000,000,000 十億
>>441
Java VM の初期値は、256MB とか。
それよりも大きいと強制終了されるが、起動時に、512MBに設定できる
たぶん、4GB の仮想メモリでも、ユーザー空間3GB・カーネル空間1GBぐらいだろ
それ以上のデータは、動画みたいにstream になる。
バッファサイズ、例えば、1MB を読んでは捨てて、次の1MB読んでは捨てて、の繰り返し
読み込んだデータを使ったら、すぐに捨てないといけない。
ユーザー空間に、空きを作らないといけない
446デフォルトの名無しさん (ワッチョイ 8252-M0pk)
2019/05/06(月) 06:20:53.21ID:Geq8Gq1G0 >>445
いつものRubyバカだろ。いい加減な知識でC言語のメモリの話題に口を挟むのはやめろ。この板になれている者からすれば「またいつものか...」ですむが、初心者にとっては害悪でしかないから消えろ。
いつものRubyバカだろ。いい加減な知識でC言語のメモリの話題に口を挟むのはやめろ。この板になれている者からすれば「またいつものか...」ですむが、初心者にとっては害悪でしかないから消えろ。
447デフォルトの名無しさん (ワッチョイ 8252-M0pk)
2019/05/06(月) 06:25:32.64ID:Geq8Gq1G0 >>444
組み込みとかの特殊な環境では例外もあるけど、基本的には環境によらずC言語で必須の概念だからスルーせずにちゃんと調べるべき。
組み込みとかの特殊な環境では例外もあるけど、基本的には環境によらずC言語で必須の概念だからスルーせずにちゃんと調べるべき。
448デフォルトの名無しさん (ワッチョイ 06d2-R0y6)
2019/05/06(月) 08:39:59.60ID:s1ulBxFy0 >439
>上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
他のプロセスがスワップ起こして重くなるから止めろって言いたい。
>上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
他のプロセスがスワップ起こして重くなるから止めろって言いたい。
449デフォルトの名無しさん (ワッチョイ 2f05-73UM)
2019/05/06(月) 10:14:49.95ID:Om5TJBQR0450デフォルトの名無しさん (ワッチョイ 2f05-73UM)
2019/05/06(月) 10:19:59.43ID:Om5TJBQR0 >読み込んだデータを使ったら、すぐに捨てないといけない
データをガンガン読み込んでいくようなプログラムだと「使ったらすぐ捨てる」のが鉄則か
データをガンガン読み込んでいくようなプログラムだと「使ったらすぐ捨てる」のが鉄則か
451デフォルトの名無しさん (ワッチョイ d701-LHRJ)
2019/05/06(月) 10:40:24.77ID:F7BEaxMm0 >>439
ユーザープロセスなのでカーネル空間はマッピングされないよ。プロセス管理のための領域はカーネル空間に多少は確保されるとは思うけど、それはユーザープロセス用ではないし。
ページサイズの関係で効率的に確保できるかどうかは別問題だけど仮想メモリ領域いっぱいまで取れるか否かと言えば取ることはできる。
実際にそんなことしたらスワップ発生しまくりでまともに動かないとは思うけど。
ユーザープロセスなのでカーネル空間はマッピングされないよ。プロセス管理のための領域はカーネル空間に多少は確保されるとは思うけど、それはユーザープロセス用ではないし。
ページサイズの関係で効率的に確保できるかどうかは別問題だけど仮想メモリ領域いっぱいまで取れるか否かと言えば取ることはできる。
実際にそんなことしたらスワップ発生しまくりでまともに動かないとは思うけど。
452デフォルトの名無しさん (ワッチョイ 7fe9-3iRC)
2019/05/06(月) 12:43:21.39ID:53K/0wkW0 実装としてはだいたいcopy on writeだから、確保だけだったら特に問題発生しないよ
453デフォルトの名無しさん (ブーイモ MM3e-iz+S)
2019/05/06(月) 16:08:26.90ID:95XsbNbMM454デフォルトの名無しさん (ワッチョイ 4321-QjK4)
2019/05/06(月) 21:20:46.06ID:lSipB+Y80 配列にある16進数アスキーを
整数型変数に数値として入れたいのですが、上手くいきません。
valの値をprintfで出力しても「0」になります。
rbuf[5]の中身は「0xDC」
rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。)
#include <stdio.h>
unsigned char sbuf[255] = {'\0'}; //送信バッファ
unsigned char rbuf[255] = {'\0'}; //受信バッファ
unsigned char work[10] = {'\0'}; //ワークバッファ
unsigned int val = 0; //値
work[0]=rbuf[5];
work[1]=rbuf[6];
work[2]='\0';
sscanf((char *)work, "%x", &val);
よろしくお願いします。
整数型変数に数値として入れたいのですが、上手くいきません。
valの値をprintfで出力しても「0」になります。
rbuf[5]の中身は「0xDC」
rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。)
#include <stdio.h>
unsigned char sbuf[255] = {'\0'}; //送信バッファ
unsigned char rbuf[255] = {'\0'}; //受信バッファ
unsigned char work[10] = {'\0'}; //ワークバッファ
unsigned int val = 0; //値
work[0]=rbuf[5];
work[1]=rbuf[6];
work[2]='\0';
sscanf((char *)work, "%x", &val);
よろしくお願いします。
455デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/06(月) 21:29:36.69ID:v87Zm/5a0 sscanf の %x は、文字列で記述された数字+アルファベットの列を 16進数として抜き出す
sscanf("10", "%x", &val); → val の値は 10進で16 となる
0xDC 0x18 の並びから どういう整数値にしたいんだろうか?
sscanf("10", "%x", &val); → val の値は 10進で16 となる
0xDC 0x18 の並びから どういう整数値にしたいんだろうか?
456454 (ワッチョイ 4321-QjK4)
2019/05/06(月) 21:38:34.55ID:lSipB+Y80457デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/06(月) 21:40:18.62ID:v87Zm/5a0 >>456 それなら
val = rbuf[5]; じゃあかんの?
val = rbuf[5]; じゃあかんの?
458454 (ワッチョイ 4321-QjK4)
2019/05/06(月) 21:50:08.40ID:lSipB+Y80459デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/06(月) 21:54:12.13ID:v87Zm/5a0460デフォルトの名無しさん (ワッチョイ f701-EPtf)
2019/05/06(月) 21:55:43.20ID:v87Zm/5a0 (俺がちゃんと >>456 を読めてなかった説 val=0xDC18 って書いてるやんけw)
461デフォルトの名無しさん (アウアウウー Sabb-vI8p)
2019/05/06(月) 22:06:19.06ID:NYoOX9LAa462デフォルトの名無しさん (アウアウウー Sabb-vI8p)
2019/05/06(月) 22:08:02.81ID:NYoOX9LAa などと、ゆっくり書いていたら既に解決か・・・
463デフォルトの名無しさん (ワッチョイ 4321-QjK4)
2019/05/06(月) 22:09:16.82ID:lSipB+Y80464デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
2019/05/07(火) 06:48:35.98ID:/Z9tG+PY0 ASCII は、7 bit キャラだろ
欧州文字コードなら、8 bitとか
欧州文字コードなら、8 bitとか
465デフォルトの名無しさん (ワッチョイ 23d2-R0y6)
2019/05/07(火) 15:31:36.79ID:gGAOuhJk0 BASIC時代 文字→文字コード変換関数が ASC(文字) だったな。
466デフォルトの名無しさん (ワッチョイ d701-LHRJ)
2019/05/08(水) 20:11:19.53ID:w7dyIR3e0 逆はCHR$(コード)だったな。
467デフォルトの名無しさん (ワッチョイ 9b6d-ahOC)
2019/05/08(水) 22:02:13.36ID:LqpjdKM80 「なんで朝潮?」と思ってしまった当時の俺w
468デフォルトの名無しさん (ワッチョイ 7f7c-gMth)
2019/05/09(木) 08:32:10.12ID:IVg2TokP0 わらってよりとも というのは、当時の人気番組名をもじったものだよ
469デフォルトの名無しさん (ワッチョイ 9f35-AilG)
2019/05/09(木) 12:40:11.38ID:J26JobOx0470デフォルトの名無しさん (ブーイモ MM9b-f8ez)
2019/05/09(木) 20:40:23.75ID:axmpki24M 「はじめてのC」なら買う
471デフォルトの名無しさん (ワッチョイ ff63-gMth)
2019/05/09(木) 22:18:17.14ID:fgRKvhjn0 その本の名前、買うときに恥ずかしいw
472デフォルトの名無しさん (ワッチョイ 9f79-ScLU)
2019/05/09(木) 23:03:35.49ID:vEdVh+9n0 質問です
文字列の配列
char matrix[Y][X]を関数に引数として渡して、渡した先の関数でtxtファイルに出力したい。
YとXはその時々によって違う値でmatrixは文字列の配列だけど1行ごとに'\0'が入っていないとき、渡した先の関数でYとXをどうやれば参照できますか?
例えば
matrix = {{‘a’, ‘b’, ‘c’}, {‘d’, ‘e’, ‘f’}};
みたいな配列です
文字列の配列
char matrix[Y][X]を関数に引数として渡して、渡した先の関数でtxtファイルに出力したい。
YとXはその時々によって違う値でmatrixは文字列の配列だけど1行ごとに'\0'が入っていないとき、渡した先の関数でYとXをどうやれば参照できますか?
例えば
matrix = {{‘a’, ‘b’, ‘c’}, {‘d’, ‘e’, ‘f’}};
みたいな配列です
473デフォルトの名無しさん (アウアウエー Sadf-NBbm)
2019/05/10(金) 00:00:40.06ID:IBOrEgMWa X(配列のサイズ)を共有してやればいいんじゃないかな
474デフォルトの名無しさん (ワッチョイ ff63-gMth)
2019/05/10(金) 00:14:05.05ID:Ojl9YgLP0 >>472
matrixのアドレスと共にX、Yの値を渡さないと無理
matrixのアドレスと共にX、Yの値を渡さないと無理
475デフォルトの名無しさん (ワッチョイ bf02-XC4S)
2019/05/10(金) 03:11:16.60ID:+vHN15fT0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★5 [おっさん友の会★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★6 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- NHK会長 新語・流行語大賞ノミネート「オールドメディア」に反論「言われる筋合いはない」「新しいメディアだと思っている」 [muffin★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 山上被告の妹「母を変えた統一教会のせいだ」「払えと言ってきて腹が立った」涙ながらに証言【安倍元総理銃撃事件😲 [861717324]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 中国「次に禁止してほしいものを教えて」 [358382861]
- 【総裁選】記者「進次郎メモ見過ぎ」高市早苗「w」小泉進次郎「責任ある者は適切な慎重さを備えるべき」 [175344491]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 【速報】中国、水産物輸入停止★3 [989870298]
