◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C言語なら俺に聞け 154 YouTube動画>1本 ->画像>10枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1578997950/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん (ワッチョイ bf63-lB9F)2020/01/14(火) 19:32:30.16ID:SgRnb4BR0
!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言語なら俺に聞け 153
http://2chb.net/r/tech/1566050562/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

2デフォルトの名無しさん (ワッチョイ 7f14-t8Ak)2020/01/14(火) 19:44:25.29ID:Xjyusg2Z0

3デフォルトの名無しさん (ワッチョイ 5f02-tgR8)2020/01/14(火) 20:20:26.03ID:Ae/uveiQ0
前スレのこれに質問です。
32bitアプリだとmallocで確保していくと2GB近くでエラーになりませんか?
頑張って色々施しても4GB近くが32bitだと限界じゃないんですかね?
もし回避策があるなら教えてください。

999デフォルトの名無しさん (ワッチョイ 7f36-///2)2020/01/14(火) 19:45:37.22ID:MAaOflfD0
>>978
ちょっと待てや
おまえ単一仮想記憶を前提に話してるか?
今や多重仮想記憶が当たり前で単一仮想記憶はかなり特殊な存在だぞ

4デフォルトの名無しさん (ワッチョイ 7f36-///2)2020/01/14(火) 20:30:37.98ID:MAaOflfD0
前スレ999本人だが
議論できるやついる?

5デフォルトの名無しさん (ブーイモ MM9f-0qp1)2020/01/14(火) 20:44:32.62ID:XPzaribqM
paeのことかしら。それでもアプリが使えるメモリは4gb以下に制限されるみたいだけど

6デフォルトの名無しさん (ワッチョイ 7f36-///2)2020/01/14(火) 20:57:35.59ID:MAaOflfD0
paeじゃない
オーバープロセスのことだよ

7デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 20:59:32.15ID:vjAz2zAO0
アドレスを保持する変数が32bitなんだから
どう頑張っても4GBまで
実際は32bit Windowsの制約で2GBまで

あとは前スレ >>982 の方法しかない

8◆QZaw55cn4c (ワッチョイ 7f47-soYg)2020/01/14(火) 21:02:41.42ID:m9Mcjsqu0
http://2chb.net/r/tech/1566050562/982
>FARポインタを扱えるようにするか

馬鹿いってんじゃないよ!このニワカ!死ね!百遍死ね!
「far/near ポインタ」は 16bit リアルモードでの用語だ

9デフォルトの名無しさん (ワッチョイ 5f02-tgR8)2020/01/14(火) 21:13:14.20ID:Ae/uveiQ0
しかし別プロセスにしようとどうしようと
結局データのアドレスは受けないといけないので
そのポインタ自体が32bitで管理されてる以上
その限界はどうしようもないような。

10デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 21:21:42.62ID:vjAz2zAO0
>>8
セグメントレジスタとセットで48bitで処理するって意味
(書かなきゃわからないですか?)

CPU的には可能だけどOS的にもコンパイラ的にも不可能だから実質不可能

11デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 21:22:29.52ID:vjAz2zAO0
ニワカはどっちだwww

12デフォルトの名無しさん (ワッチョイ 7fa6-uXf3)2020/01/14(火) 21:31:07.55ID:S6Ak+Pxt0
32ビットだと大きいメモリは最初の方で確保して最後の方で解放するなぁ
あるいはプロセスを分けるか

13◆QZaw55cn4c (ワッチョイ 7f47-soYg)2020/01/14(火) 21:32:43.12ID:m9Mcjsqu0
>>10-11
ではお聞きいたしますが、セグメントレジスタ16ビット+レジスタ32ビットのペアで指定した先は何ビット空間ですか?
IA-32 アーキであるかぎり、どうあがいても32bit 空間ではないでしょうか?PAE 搭載であってもユーザーからみえるのはやっぱり32ビットなのでは?

14デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 21:34:48.26ID:vjAz2zAO0
>>13
知らないなら黙ってろよ

15デフォルトの名無しさん (ワッチョイ 7f01-qx2z)2020/01/14(火) 21:40:51.41ID:RxBpnTJ90
多重仮想記憶ってプロセス毎に同じアドレス空間を提供するだけの話
(逆に単一仮想記憶はプロセッサのアドレス空間を分割してプロセスに提供する)
http://yougo.ascii.jp/caltar/多重仮想記憶
前スレの質問はアプリの話だからあんまり関係ないよ
オーバープロセスとか言うオレオレ用語はよくわからんけど…
オーバーコミットの話じゃないよね?

16◆QZaw55cn4c (ワッチョイ 7f47-soYg)2020/01/14(火) 21:41:08.27ID:m9Mcjsqu0
>>14
私の質問に回答できないのですね…
IA-32 では、それが PAE を搭載していたとしても、ユーザーが一度に扱えるのは32ビットどまりですよ

>>10
>CPU的には可能だけど
CPU的にも不可能です

17デフォルトの名無しさん (ワッチョイ 7fa6-uXf3)2020/01/14(火) 21:56:01.45ID:S6Ak+Pxt0
windows依存なら CreateFileMapping MapViewOfFile で32ビットより大きいのをやりくり

18デフォルトの名無しさん (ワッチョイ df2d-G18V)2020/01/14(火) 21:57:06.89ID:jSZPoIDP0
今、話題になっているのは32bitOSの場合であって、IA-32 どうこうは微妙に違う話にも思えるのは内緒。
ということで話を戻すと、例えば32bit版Windowsには、OS管理外メモリとして8Gだの16Gだの扱うことができるRAM-DISKアプリがあるわけで。
32bitアプリでも、セグメントレジスタに正しいセレクタ値をセットできるのであれば、4G超のメモリ空間を扱える、と言えなくもない予感がする。

19デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 22:02:55.12ID:vjAz2zAO0
386の時代から仮想アドレス空間は64TBだってのに

20デフォルトの名無しさん (ワッチョイ 7fa6-uXf3)2020/01/14(火) 22:04:06.75ID:S6Ak+Pxt0
>>18
RAM-DISK使わんでもAPIには上位32ビット下位32ビットの64ビット指定できるから

21デフォルトの名無しさん (ワッチョイ 5f02-tgR8)2020/01/14(火) 22:05:55.54ID:Ae/uveiQ0
話の前提は、64bitOSで32bitプログラムを動作させる場合ですね。

22デフォルトの名無しさん (ワッチョイ 5f63-hsX7)2020/01/14(火) 22:09:55.66ID:iQtyfXTR0
できるならやり方を具体的に提示してくれよ
罵り合ってる内容が一切質問者に有益な情報じゃない

23デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 22:15:15.91ID:vjAz2zAO0
64bitOSなら32bitアプリで4GiBまで扱える(ように出来る)
これでいくらかは改善するのでは?

24デフォルトの名無しさん (ワッチョイ df2d-G18V)2020/01/14(火) 22:16:39.36ID:jSZPoIDP0

25デフォルトの名無しさん (ワッチョイ 5f02-tgR8)2020/01/14(火) 22:16:46.27ID:Ae/uveiQ0
>>23
確かにオプション指定でそれが出来ますね。
やっぱりそれが限界でしょうかね。

26デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 22:18:31.70ID:vjAz2zAO0
それでもダメなら
DLLを扱う用の32bitプロセスと
多量のメモリを扱う64bitプロセスに分けて
プロセス間通信でデータをやり取りする

27◆QZaw55cn4c (ワッチョイ 7f47-soYg)2020/01/14(火) 22:31:10.88ID:m9Mcjsqu0
>>19
80386 に関していえば、その記述「386の時代から仮想アドレス空間は64TB」はわりとデマ的に流布されていることは理解します。手元の本
https://www.あまぞん.co.jp/dp/4756101305/
にも載っていました、確かに紛らわしい記述だとは思います
セグメントレジスタが指す「セレクタ値」は8バイトごとである、という事実から、セレクタ値のアドレスを意味する部分を16-2=14ビットとして、これと一般レジスタ32ビットとの直積から
46ビット=64T 分のアドレス空間が取れる、という計算だとは思いますが、この記述は不正確であり実情からは程遠いと思います

80386 では、セグメントレジスタが指すセレクタ値にひも付けられているセグメントベースはやはり32ビット空間の中なんです。32ビット空間の外に出ることはありません。

28デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 22:34:42.75ID:vjAz2zAO0
Pentium Pro の時代から64GiB扱えるわけですが
Windows Server系は32bitでも64GiB使える(ものもある)わけですが
問題はフラグメントなのでアドレス空間が広がれば解決するわけですが

29デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 22:36:48.89ID:vjAz2zAO0
コテのくせにド素人だな

30◆QZaw55cn4c (ワッチョイ 7f47-soYg)2020/01/14(火) 22:55:14.31ID:m9Mcjsqu0
>>29
セグメントレジスタが指すグローバルディスクリプタテーブル(GDT)中の一つ一つのエントリー(セレクタ値)に含まれる情報の配置状況が 80386 から変わっておれば、あなたのおっしゃることは理解できます
pentium を例にそれを示せますか?

31デフォルトの名無しさん (ワッチョイ df73-AxFo)2020/01/14(火) 23:11:55.67ID:vjAz2zAO0

32デフォルトの名無しさん (ワッチョイ e101-muX5)2020/01/15(水) 00:13:17.27ID:SlSlX/cQ0
仮想86EMSが使われていた頃

33デフォルトの名無しさん (ワッチョイ ae0d-sHAu)2020/01/15(水) 03:41:15.35ID:7yCfF8ki0
>>6
ググっても出てこないので、正確な技術用語を教えてください

34デフォルトの名無しさん (ワッチョイ 8236-HLSl)2020/01/15(水) 07:36:38.25ID:6QOzbNpL0
ファイルマッピング
でいいか?

35デフォルトの名無しさん (ワイーワ2 FF4a-otum)2020/01/15(水) 13:40:12.09ID:eUr1BYr3F
リソースの再利用について


36デフォルトの名無しさん (ワッチョイ 02a6-pREH)2020/01/15(水) 13:56:26.73ID:+l1Z2xEr0
大きいメモリをできるだけ上位のアドレスで割り当てる
普通のメモリ割り当てなら下位のアドレスになるから
使い分けで断片化の影響を減らせる

VirtualAllocの MEM_TOP_DOWN

37デフォルトの名無しさん (ワッチョイ 8261-frEi)2020/01/15(水) 14:03:29.42ID:60b3MtID0
XPで付属のIMEだかuxtheme.dllあたりが中途半端なbaseaddress指定してあって1ブロックとしては700MBくらいまでしか確保できなかった思い出

38デフォルトの名無しさん (ワッチョイ bd02-otum)2020/01/16(木) 23:59:28.03ID:n2KajW3z0
2つスレッドがあってサブの方を使わない時は
こんな感じで待機してるんだけどやっぱマヌケかな?w
その都度作った方がやっぱいいの?
while(flag){ Sleep(1000); }

39デフォルトの名無しさん (ワッチョイ 02ad-nP71)2020/01/17(金) 00:38:20.87ID:VVaP2eJK0
間抜けというか、完全に寝かせてしまえばいいのでは?

40デフォルトの名無しさん (ワッチョイ 4263-A78j)2020/01/17(金) 00:42:06.99ID:Ed4nA3uH0
>>38
環境を書かないと
WindowsならDefWindowProc呼び出すとか
Unixならselectでイベント発生を待っているとか

41デフォルトの名無しさん (ワッチョイ 412d-6zBS)2020/01/17(金) 01:14:24.13ID:rOjn9SwA0
>>38
それは簡単のように見えて、実は奥深いプログラミングのテーマの1つかもだけど。
問題がないのであれば、そのコードはマヌケでもないし悪くもないので、そのままでいいと思うよ。

42デフォルトの名無しさん (ワッチョイ bd02-otum)2020/01/17(金) 01:18:32.17ID:e4Iv2ZR10
>>39-41
環境はWindowsです。
スレッドは二つだけでサブも結構使ってるので
flagで管理して動かしたい時だけTRUEにしてる感じです。
特に動作に問題はないのでこのままでいいんでしょうかね。

43デフォルトの名無しさん (ブーイモ MMe5-4X0p)2020/01/17(金) 01:31:08.41ID:uTUiG7kHM
リソースの競合がないんなら好きにすればいいけど、
あるなら、動いているように見えて低い確率で破綻するってのもあるよ

44デフォルトの名無しさん (ワッチョイ 412d-6zBS)2020/01/17(金) 01:37:20.83ID:rOjn9SwA0
>>42
問題がない以上、NGにする理由もないわけで、このままでいいです。
言い換えると、何か問題があるなら、それに応じた修正や変更の必要ありかもです。

45デフォルトの名無しさん (ワッチョイ bd02-otum)2020/01/17(金) 02:10:16.80ID:e4Iv2ZR10
>>43
一応そのへんは気を付けてるつもりなので今のところは問題ないですね。
>>44
分かりやすくていいので問題ないならこのまま行こうと思います。

ありがとうございました。

46デフォルトの名無しさん (ワッチョイ b957-otum)2020/01/17(金) 02:43:46.95ID:gAZZjojh0
呼んでから起きるまでのタイムロスはどうでもいいのか

47デフォルトの名無しさん (ワッチョイ bd02-otum)2020/01/17(金) 03:19:40.62ID:e4Iv2ZR10
>>46
そこはOKです。瞬時に処理してくれなくても問題ない処理なので。

48デフォルトの名無しさん (ワッチョイ 1db3-EgUp)2020/01/17(金) 06:13:31.64ID:KcAYJrW80
>>38
イベント待ちがスマートでは?

サブは WaitForSingleObject でイベント待ち
サブを動かす時は メインスレッドから SetEvent する

49デフォルトの名無しさん (ドコグロ MM09-mQF2)2020/01/17(金) 07:22:16.67ID:C1DTJTUYM
>>38
すげーマヌケに見える
スレッド作成する時間も惜しいなら>>48が言うようにイベントとかを使うべきだし、そうでないなら自分で言ってる通りその都度作った方がいい
そもそもサブともうひとつのスレッドとのやり取りはないんか?

50デフォルトの名無しさん (ワッチョイ 8236-HLSl)2020/01/17(金) 07:26:24.09ID:sP/gsAG30
>>48でFA

51デフォルトの名無しさん (ワッチョイ 6e7b-sHAu)2020/01/17(金) 09:59:39.59ID:Bc/tu7Ki0
スレッドプール用のapiあるんだからそっちのが良くない?

52デフォルトの名無しさん (ワッチョイ bd02-otum)2020/01/17(金) 20:18:08.47ID:e4Iv2ZR10
>>48-51
ありがとうございます。参考にさせてもらいます。

53デフォルトの名無しさん (アウアウウー Sa05-SNGL)2020/01/17(金) 21:01:33.00ID:IvE1mrxVa
POSIXスレッドなら cond wait みたいなの使うのがよさげ

54デフォルトの名無しさん (オッペケ Srd1-s5Rz)2020/01/17(金) 21:27:33.03ID:fcTBGFJ8r
int main()
{
int array[100][10];


array[0][0] = 61;

printf("%d\n", *(int*)array ) ;



}
これなんでIntポインターにキャストしないとだめなん?
arrayでもポインターだから*つければ配列の先頭参照できないとおかしくね?
例えば
char array[] ="unko king";
だとしたら
%s とarrayで文字列表示できるじゃん
*(char*)arrayなんてしないでしょ?

55デフォルトの名無しさん (オッペケ Srd1-s5Rz)2020/01/17(金) 21:32:02.00ID:fcTBGFJ8r
%s とarrayで文字列表示できるじゃん
*(char*)arrayなんてしないでしょ?

じゃなくて(char*)arrayだわ
みすった

56蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ f901-eWjF)2020/01/17(金) 21:33:28.77ID:90cOo2870
配列はポインタではない。

57デフォルトの名無しさん (オッペケ Srd1-s5Rz)2020/01/17(金) 21:37:01.79ID:fcTBGFJ8r
>>56
添字つけない場合は配列の先頭のメモリアドレスを持つポインタなんだがw

58デフォルトの名無しさん (オッペケ Srd1-s5Rz)2020/01/17(金) 21:45:56.20ID:fcTBGFJ8r
>>56
例えば
int array[40][40];
array[30][30]=10;
int *p;
p=array;

*(p+(40*30)+30)でarray[30][30]にアクセスできる

59蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ f901-eWjF)2020/01/17(金) 21:51:59.19ID:90cOo2870
型に互換性があることと、型が同じであることは異なる。int[20][20]はint*とは互換性がない。

60蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ f901-eWjF)2020/01/17(金) 22:01:25.25ID:90cOo2870
配列はアドレス値を動かせない。
配列とポインタではsizeofの値が違うことがある。
多重ポインタと多次元配列はメモリレイアウトが異なる。

よって配列はポインタではない。

61デフォルトの名無しさん (ワッチョイ 4135-TOPI)2020/01/17(金) 22:35:45.81ID:EE408Bd70
2次元配列は各行の配列が配置されてるメモリ上のアドレスのリストですか?
その場合、そのリストの要素であるアドレス値はどうやって取り出せますか?
C言語なら俺に聞け 154 YouTube動画>1本 ->画像>10枚

62デフォルトの名無しさん (ワッチョイ 4135-TOPI)2020/01/17(金) 22:43:50.57ID:EE408Bd70
この場合で言う、データの列の10,20,30というようなアドレス値を取り出す方法はありますか?

63デフォルトの名無しさん (ワッチョイ 4135-TOPI)2020/01/17(金) 22:44:02.60ID:EE408Bd70
C言語なら俺に聞け 154 YouTube動画>1本 ->画像>10枚

64蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-eWjF)2020/01/17(金) 22:44:41.28ID:j19gqc7sd
1つの配列は連続した1つのメモリブロックになっている。二次元配列も1つのメモリブロック。配列の中身は実体。
配列名のみを指定すると配列の先頭へのポインタと互換になる。

65蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-eWjF)2020/01/17(金) 22:46:16.09ID:j19gqc7sd
array[1][2]のように要素を指定できる。

66デフォルトの名無しさん (ワッチョイ 4135-TOPI)2020/01/17(金) 22:57:35.09ID:EE408Bd70
int array[10][2]はint[10]が2個あるという意味ですか?

67蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-eWjF)2020/01/17(金) 22:58:16.83ID:j19gqc7sd
はい。

68デフォルトの名無しさん (ワッチョイ 4135-TOPI)2020/01/17(金) 23:01:31.63ID:EE408Bd70
ではそのint[10]というのを行と呼ぶとした時、なぜこの実行結果では行間のアドレス間隔が行数になるのでしょうか。
C言語なら俺に聞け 154 YouTube動画>1本 ->画像>10枚

69蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ f901-eWjF)2020/01/17(金) 23:07:01.46ID:90cOo2870
>>67はウソ。

70蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ f901-eWjF)2020/01/17(金) 23:29:55.57ID:90cOo2870
スミマセン

71デフォルトの名無しさん (ワッチョイ 02ad-A78j)2020/01/18(土) 04:54:51.45ID:GHIm2HIn0
>>66
それはint[2]が10個だ。

72デフォルトの名無しさん (ワッチョイ 8236-HLSl)2020/01/18(土) 07:37:38.87ID:cLOUBKze0
>>54
おまえさんが array[0][0] = 61; と書いているように、
int は array[0][0] だ、ここ大事だぞ
array[0] は int ではないことを絶対に忘れるな

知ってのとおり
printf("%p", array); は
printf("%p", &array[0]); と解釈される
つまり int でないもののアドレスとなる

だから
printf("%d", *array); と実体化すると
printf("%d", *&array[0]); のように int でないものとなる

73デフォルトの名無しさん (オッペケ Srd1-s5Rz)2020/01/18(土) 09:00:32.29ID:8VbKHwfkr
>>72

おおサンクス!

74デフォルトの名無しさん (ワッチョイ 42c5-6zBS)2020/01/18(土) 12:36:57.02ID:ADLYtxAZ0
int three[2][3][4];

これは4の配列が3個で、それが2個ということでおk?

75デフォルトの名無しさん (ワッチョイ 42d2-Jw1z)2020/01/18(土) 15:14:27.29ID:DLgVDe3/0
そうじゃない
int [3] [4]が二個
って考える
そのあとint[3][4]について考えると
int[4]が3個ってなる

76デフォルトの名無しさん (ラクッペ MMe5-pplk)2020/01/18(土) 15:19:38.07ID:TdnAkHteM
>>74はそう言ってるのでは?

77デフォルトの名無しさん (ワッチョイ 829f-9xZB)2020/01/18(土) 15:40:38.09ID:/vLKu3q60
静的に確保された多次元配列の実態はただの1次元配列だから
int array[2][2] = {};
array[1][0] = 2525;
printf(“%d\n”, array[0][2]);
ってやると2525が出力される

78デフォルトの名無しさん (オッペケ Srd1-s5Rz)2020/01/18(土) 18:10:12.32ID:8VbKHwfkr
再帰むずすぎてハゲそうだわ
これなにやってるかパット見て分かる人いる?

int rec(int num) {
printf("%d\n", num);
if (num == 1)
return 1;
else {


return num * rec(num - 1);
}
}

79デフォルトの名無しさん (ワッチョイ 8236-HLSl)2020/01/18(土) 18:15:41.86ID:cLOUBKze0
階乗のように見えるが、違うのか?

80デフォルトの名無しさん (ワッチョイ 1db3-EgUp)2020/01/18(土) 18:16:54.67ID:/9q/+LXn0
再帰の例で一番出てくるヤツ

if の中はゼロとの比較の方が良いと思う

81デフォルトの名無しさん (ワッチョイ 42d2-Jw1z)2020/01/18(土) 18:17:52.93ID:DLgVDe3/0
これをfixとかでやるとますますわからなくなる

82デフォルトの名無しさん (ワッチョイ 1db3-EgUp)2020/01/18(土) 18:19:40.64ID:/9q/+LXn0
rec(1) = 1
rec(n) = n * rec(n-1)

漸化式による記述

83デフォルトの名無しさん (ワッチョイ 4135-pplk)2020/01/18(土) 18:25:53.64ID:qr7I8bae0
重要なのはreturnの部分だけだしな

84デフォルトの名無しさん (ワッチョイ 0201-mQF2)2020/01/18(土) 19:28:24.57ID:34RcyaUW0
>>78
rec(3) 位にして自分でトレースしてみればわかると思う

85デフォルトの名無しさん (ワッチョイ a9d2-co1w)2020/01/18(土) 20:39:04.60ID:et7QELfi0
再帰のコードを書いていて不思議な気分になるのは
なんで今書いているものを呼び出せるんだろうとか思っちゃうからかな

86蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-eWjF)2020/01/18(土) 20:42:37.39ID:Q+FQEvxBd
再帰できるのはスタックフレームのおかげやで

87デフォルトの名無しさん (ワッチョイ 8679-6zBS)2020/01/18(土) 20:48:04.45ID:wrxXpMgf0
再帰は遅いから実践ではできれば使わずに済ませたい

88デフォルトの名無しさん (ワッチョイ e252-iiEx)2020/01/18(土) 21:18:15.56ID:Qnj8VWpB0
単純なループですむならその方がいいだろうな。
木構造の探索みたく本質的に再帰で書いた方が自然なものは再帰のがいい。

89デフォルトの名無しさん (ワッチョイ 0201-mQF2)2020/01/18(土) 21:47:38.11ID:34RcyaUW0
今どき再帰が遅い?

90デフォルトの名無しさん (ワッチョイ 8679-6zBS)2020/01/18(土) 21:54:07.90ID:wrxXpMgf0
今時〜が遅いと言い放てる環境ならまず今時Cを使う意味がない

91デフォルトの名無しさん (スップ Sd82-slCE)2020/01/18(土) 22:37:40.26ID:jIyN1Euld
再帰は遅さより深さが怖い

92デフォルトの名無しさん (ワッチョイ e1da-A78j)2020/01/18(土) 22:44:24.70ID:ecN+p+Ar0
再帰でなければ実現できないアルゴリズムがあるとすれば,例えばどんなの?

93デフォルトの名無しさん (ワッチョイ c546-KHKa)2020/01/18(土) 23:02:02.15ID:Kwj2OX4/0
> でなければ実現できない
という要件が気になる。

94デフォルトの名無しさん (アウアウクー MM91-0c/Z)2020/01/19(日) 02:29:28.66ID:ec7Q1zSDM
迷路のルート検索に再帰で書いた事あるけど10000ぐらいでスタックオーバーするので再帰をループで書き直した思いで

95デフォルトの名無しさん (ワッチョイ 42c5-6zBS)2020/01/19(日) 04:29:07.91ID:r8dbXOf20
お前ら知ってるか
Pythonの構文解析はgoto文の状態遷移なんだぜ
あれ見てPythonは業が深い言語だと思ったわ
まぁあれが一番早いんだろうけど

96デフォルトの名無しさん (ワッチョイ 8236-HLSl)2020/01/19(日) 06:30:18.66ID:6oeBvQPN0
ツリー探索なんか待ち行列を使えば非再帰に変形できるからな

97デフォルトの名無しさん (スップ Sd22-EgUp)2020/01/19(日) 08:03:33.51ID:D5W6f6uHd
C言語で記述可能かどうかって意味なら
どんなものでも非再帰に変形可能

98デフォルトの名無しさん (ワッチョイ 0201-mQF2)2020/01/19(日) 08:20:31.11ID:UmCLgzkS0
>>95
構文解析とかは大抵そうだよ
最近は使ってないから変わってるかも知れんが昔yacc/lex使った時の出力はgoto使い捲くりだったし

99デフォルトの名無しさん (ワッチョイ a17b-WxMz)2020/01/19(日) 08:26:41.57ID:bqsJmSpA0
>>85
関数の最初に「返り値と関数名と仮引数リスト」を書くでしょ。
それだけの情報があれば関数を呼び出すには十分なのだ。

…と、構造体名の前方宣言みたいな説明でケムに巻いてみる。

100デフォルトの名無しさん (ワッチョイ 82a5-36M6)2020/01/19(日) 09:07:49.21ID:IjeRNxme0
ソースコード上ではあたかも再帰が可能かのように見せかけてるだけでしょ
そういうウソをコンパイラは演出してくれている

101デフォルトの名無しさん (ワッチョイ e252-iiEx)2020/01/19(日) 09:13:46.72ID:Wel1D6/w0
>>85
実際に再帰呼び出しが実行されるのはその関数が書き終わったあとなのだから何の不思議もないような気がするが。

102デフォルトの名無しさん (ワッチョイ 42d2-Jw1z)2020/01/19(日) 09:52:53.26ID:L+cLui7g0
そもそもC言語の再帰をコンパイルして出てきたマシーンコードって
スタックに積んでgotoしてるだけのループじゃん

103デフォルトの名無しさん (ワッチョイ 82a5-36M6)2020/01/19(日) 10:09:42.96ID:IjeRNxme0
本物の再帰を実現できる無限のメモリーなんて存在しないじゃん
だから現状は擬似再帰、
しかもあと500年くらいは擬似再帰で我慢してもらうしかない

104デフォルトの名無しさん (ワッチョイ 42d2-Jw1z)2020/01/19(日) 10:31:33.19ID:L+cLui7g0
再帰は再帰専用のメモリースペースを使うから限界がすぐくるだけやぞ

105デフォルトの名無しさん (ワッチョイ 82a5-36M6)2020/01/19(日) 10:42:13.41ID:IjeRNxme0
今の科学力では本物の数学的な再帰なんて実現出来ない、
だから、擬似再帰に留まってる

あとは実数マシンと整数マシンで、現状は離散的な整数マシン
実数をそのまま扱えるマシンすら存在してない

106デフォルトの名無しさん (スップ Sd22-EgUp)2020/01/19(日) 10:49:21.60ID:RfLx+x9Fd
コンピューターに限界がある
なんてことは誰でも知ってるから
いちいち書かなくても良いよ

107デフォルトの名無しさん (ワッチョイ 82a5-36M6)2020/01/19(日) 10:56:48.90ID:IjeRNxme0
だな
>>102が言うからには他の言語ではもっと画期的な方法があるのかと思ってた

108デフォルトの名無しさん (ワッチョイ 42d2-Jw1z)2020/01/19(日) 10:57:08.36ID:L+cLui7g0
そもそも宇宙は巨大な計算機だからすでに存在してる

109デフォルトの名無しさん (ワッチョイ 4263-A78j)2020/01/19(日) 11:00:03.37ID:+Juhn6xh0
無限ループこそが再帰の神髄

110デフォルトの名無しさん (スップ Sd22-EgUp)2020/01/19(日) 11:00:47.42ID:RfLx+x9Fd
本物の再帰
とか
疑似再帰
とか

文系かよ

111デフォルトの名無しさん (ワッチョイ a17b-WxMz)2020/01/19(日) 15:32:55.94ID:bqsJmSpA0
>>105
「アナログコンピュータ」ってのがあって、俺がいじったのは
その都度回路を組んで信号を送って電圧計の針の振れを観察するんだが、
あれは一応、物理の限界の精度で実数をそのまま扱うマシンだね。

このスレッドで扱う対象じゃないけど。

112デフォルトの名無しさん (スップ Sd22-EgUp)2020/01/19(日) 15:48:32.08ID:RfLx+x9Fd
アナログと実数には遠い溝が...

精度はデジタルの方がはるかに上

113デフォルトの名無しさん (アウウィフ FF05-otum)2020/01/19(日) 16:44:13.95ID:ehZNNwbSF
>>54
そんなキャストはしてはいけない
お前の使い方が間違ってる
敢えて括弧を付けるが正しいのはこの二つだけ
printf("%d\n", *(array[0]));
printf("%d\n", *(*array));

114デフォルトの名無しさん (ワッチョイ 8236-HLSl)2020/01/19(日) 17:47:28.55ID:6oeBvQPN0
無駄なだけの「正しい」括弧なんかやめれ
printf("%d", (*array)[0]); //少なくともこれの意味がわかるようになるまでは

115デフォルトの名無しさん (ワッチョイ 02a6-pREH)2020/01/19(日) 19:24:15.02ID:IVwJAfoP0
ポインターがintと同じサイズと思うなよ

116デフォルトの名無しさん (ワッチョイ 8236-HLSl)2020/01/19(日) 20:11:46.65ID:6oeBvQPN0
エー、エイチ、オー

117デフォルトの名無しさん (ブーイモ MMcd-lkYm)2020/01/19(日) 20:13:42.23ID:AxsWVwh/M
丸括弧の次に優先順位が高い角括弧ってだけの話じゃん
識別子に最優先くっついてガツンと先に作用するて意味じゃわかりやすい関数等の丸括弧を除いて最強という。

118デフォルトの名無しさん (ワッチョイ e252-iiEx)2020/01/19(日) 20:40:31.66ID:Wel1D6/w0
>>117
なんか演算子の優先順位をいい加減に覚えてそう。C言語のBNFでも見てきたら?

119デフォルトの名無しさん (スップ Sd22-EgUp)2020/01/19(日) 21:31:45.40ID:RfLx+x9Fd
+ と << が混ざった演算
( ) を付けないと警告を出すアホコンパイラがあるんだよね

120デフォルトの名無しさん (ワッチョイ 5f44-ET0W)2020/01/22(水) 18:42:43.98ID:fnLfByOj0
ウィキのバスエラーの所に出ているサンプルをVisual Studioでコンパイルしたんですが
デバッガで見てもゴミ値が入るだけで特に警告もエラーも出さないので
バスエラーになっているかいないか分かりません。バスエラーを体験するにはどうすればいいですか?
コンパイルオプションで対応出来ますか?

https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%B9%E3%82%A8%E3%83%A9%E3%83%BC

121デフォルトの名無しさん (ワッチョイ 27b3-oAbd)2020/01/22(水) 18:48:19.32ID:0ayd3B3Q0
x86はアラインメント不整合でも正常に読み書き出来る

AVXレジスタで
アラインメントが整ってないと使えない命令があるから
それを使えば例外発生する

MOVAPS など

122120 (ワッチョイ 5fda-ET0W)2020/01/23(木) 20:01:35.17ID:9tTsebGL0
ありがとうございました。

123デフォルトの名無しさん (ワッチョイ 5f61-RMi8)2020/01/23(木) 20:11:21.63ID:6RFiXn/e0
int main(void)
{
return *(int *)0;
}
の方が簡単

124デフォルトの名無しさん (アウアウウー Sa4b-AenA)2020/01/24(金) 17:55:51.18ID:zcPs/H1Xa
>>123
それセグメンテーションフォルトでは?バスエラーになるCPUあるの?

125デフォルトの名無しさん (ワッチョイ 5f36-m6Yn)2020/01/24(金) 18:05:28.52ID:xfkHfIRp0
リードアクセスだしなあ
0番地が未実装というのは考えにくいね

126デフォルトの名無しさん (ワッチョイ c701-/WoK)2020/01/24(金) 19:16:51.65ID:JBJjeU6+0
そもそもバスエラーとかセグメンテーションフォールトは、CPUの例外等をOS側で適当にマッピングして、そう呼ぶOSがあるというだけだからOS依存。

x86/x64のCPUで>>123のような適当なメモリアクセスを行うと、CPUで例外#GPや例外#PFが発生する。UNIXならそれを状況に応じてセグメンテーションフォールト(SIGSEGV)やバスエラー(SIGBUS)として扱い、WindowsだったらEXCEPTION_ACCESS_VIOLATIONとして扱う。

アライメントがずれている時は、発生した例外#ACをバスエラー(SIGBUS)やEXCEPTION_DATATYPE_MISALIGNMENTとして扱う。

127デフォルトの名無しさん (ワッチョイ 5f36-m6Yn)2020/01/24(金) 20:23:29.22ID:xfkHfIRp0
ASを出してから一定時間経過してもDTACKが帰ってこないとBERR端子をぶっ叩かれてバスエラー

128デフォルトの名無しさん (ワッチョイ 5f61-RMi8)2020/01/24(金) 20:40:29.99ID:aSv3EoFQ0
68K通った人からするとアライメント不整合はアドレスエラーの印象が強い

129デフォルトの名無しさん (ワッチョイ 27b3-oAbd)2020/01/24(金) 21:00:31.06ID:3pA3r7pN0
スパッと例外で死んでくれれば良いんだけど
単にズレるだけってCPUがある

130デフォルトの名無しさん (アークセー Sx7b-lpLI)2020/01/25(土) 00:46:35.96ID:cts07rfpx
int i;
int *pi = &i;
*((int *) (((char *) pi) ÷ 1)) = 1;

x86はこれがバスエラーにならないね

131デフォルトの名無しさん (バットンキン MMeb-/WoK)2020/01/25(土) 01:00:05.76ID:vvn39fxSM
>>130
÷は+だとして、
eflagsのACビットを立てておくとバスエラーになる

132デフォルトの名無しさん (アークセー Sx7b-lpLI)2020/01/25(土) 01:03:11.29ID:cts07rfpx
>>131
ゴメン、その通り
加算演算子です

133デフォルトの名無しさん (ワッチョイ 5f63-Jq7D)2020/01/25(土) 01:05:26.15ID:iDfv/qKw0
そもそもx86だとバスエラー発生が無理なんではないのか?

134デフォルトの名無しさん (ワッチョイ 877b-qY3Q)2020/01/25(土) 05:21:20.46ID:g3vROROv0
>>129
ARMのCPUでアラインメントの整合を怠ったら
偶数番地/奇数番地か、その2倍のアドレス値だったか
データの半分しか書き込まれなくて…って事態を目撃したことがある。

素朴なビットマップグラフィックのプログラムだったので
画面がシマシマになるのが文字通り目で見えた。
同じソースをx86系で実行すると期待通りの結果になるんだよ。

135デフォルトの名無しさん (ワッチョイ c701-/WoK)2020/01/25(土) 18:58:17.60ID:OESzqPub0
>>130
>>133

// x64 linux

volatile int x[2];

int main () {

asm("pushf");
asm("btsl $18, (%rsp)"); // set AC
asm("popf");

// *(int*)((char*)x+1)=1; // SIGBUS

asm("pushf");
asm("btrl $18, (%rsp)"); // clear AC
asm("popf");

return 0;
}

136デフォルトの名無しさん (アークセー Sx7b-lpLI)2020/01/25(土) 23:01:02.31ID:5aeLZw2zx
>>135
130です
130のように書くとバスエラーがなければ ip を破壊する可能性が高いし、最適化でコードが生成されないためのケアもされていて思慮深いコードですね…

しかしGASのオベランドは逆に見えてしまって…

137デフォルトの名無しさん (ワッチョイ 5f63-Jq7D)2020/01/25(土) 23:05:55.96ID:iDfv/qKw0
やはりアセンブラの領域にまで踏み込まないと無理なんでしょうね

138デフォルトの名無しさん (ワッチョイ 5fa3-9VUD)2020/01/25(土) 23:07:44.29ID:tu9lbSH20
>>92
再起はループに起こせるよ


lud20200126175816
このスレへの固定リンク: http://5chb.net/r/tech/1578997950/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C言語なら俺に聞け 154 YouTube動画>1本 ->画像>10枚 」を見た人も見ています:
C言語なら俺に聞け 155
C言語なら俺に聞け 163
C言語なら俺に聞け 143
C言語なら俺に聞け 152
C言語なら俺に聞け 151
C言語なら俺に聞け 148
C言語なら俺に聞け 145
C言語なら俺に聞け 144
C言語なら俺に聞け 139 [無断転載禁止]
CORBAなら俺に聞け
ゲームプログラムなら俺に聞け33
プログラム技術板の質問なら俺に聞け!
キャンプの事なら俺に聞け! [無断転載禁止]
まあアレだ、わからない事があったら俺に聞け!!
ホームトレード(HT)のことなら俺に聞け”先物”
●●●●TCL/TKなら俺に聞け 4●●●● (534)
機械語なら俺に質問しろ!その2
LinuxカーネルはC言語なのにオブジェクト指向
国内学習組で英語学習法ききたいなら俺に聞いてよ
SQLなら俺に訊け
OpenOfficeでわかんない事は俺に聞け
MRの恋愛は俺に聞け(笑顔)! [無断転載禁止]
steamに関する質問なんでも答えます わからないことは俺に聞け
C言語はバイトオーダー等のハードウェア構造を意識しなければ
C言語でツール作ろうと思うんだけど何かいい案ある?
C言語初心者なんだけどポインタに詳しい人ちょっと来て
ウソップ「使えねェ仲間は切り捨てて進めばいい、この船に見切りをつけるなら俺にもそうしろよ!」←これwwwwww
【速報】髪の毛が余って余ってしょうがない13歳少年が話題 こんだけ生えてるなら俺にも分けてくれよ ステータスミスだろこれ
東南アジアで車海老の養殖したい、んだけど今病気で不作らしい、お前らなら俺にいくら投資できる? [無断転載禁止]©2ch.net
C言語って…
Rustっていい言語なの?
道州制は地域性や言語など語り継がれるべき
南山英米と東外大マイナー言語ならどっちに行きたい
[システム]プログラム言語など学習スレ[初心者]
プログラミングを始めたい。どの言語ならこの先生きのこれる?
C言語について
c言語教えてくれ
C言語上級者スレ
C言語をやりたいんですが
C言語 誰か教えて
お前ら俺に付いてくんな
ソケット通信なら俺に任せろ
C言語勉強してるんだが
C言語を勉強中の大学1回生だが
C言語を教えてください!!
 スパロボファンに聞きたい。じっさい「最強のロボット」は何になるの?
 文句があるなら俺に言え 
英語とかいうキチガイ言語
C言語でRADって作れるんでしょうか?
■隠蔽なら俺にまかせろ(すが)■
C#とか言うなんちゃてC言語wwww
なんでもC言語で開発する奴アンチスレ
無知の俺にC言語について教えてくれ。
C言語でコミュニケーションを取るスレ
誰か生き残ってるなら俺に力を与えてくれ
C言語マスターってコテちょっと来い
コンテンツ言語『 Curl 』情報交換スレ
あかりちゃんなら俺にもチョコくれると思う
C言語でテトリス作れる人来て!👾
C言語×ダンジョン×学園なゲームを創りたいスレ
8ビットCPUでC言語?ないないありえないっしょ!5
8ビットCPUでC言語?ないないありえないっしょ! 5
8ビットCPUでC言語?ないないありえないっしょ! 4
05:57:04 up 55 days, 6:00, 0 users, load average: 39.36, 47.69, 55.89

in 0.012159824371338 sec @0.012159824371338@0b7 on 030918