!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C2x ドラフト
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2731.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言語なら俺に聞け 158
https://mevius.5ch.net/test/read.cgi/tech/1640401906/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 159
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワンミングク MMa2-RRwJ)
2022/08/04(木) 23:32:27.83ID:yWVViPyIM762デフォルトの名無しさん (ワッチョイ 9fc2-He5u)
2022/12/06(火) 08:27:50.69ID:63yxghiR0 そりゃー8086のセグメント方式なんだから64k超えは問題ありまくりんぐでそ
763デフォルトの名無しさん (アウアウウー Sab5-QZbE)
2022/12/06(火) 11:20:14.67ID:yvaEv+2ca >>761
> Win98時代は1Mバイト程度の配列変数作っただけで動作がおかしくなってたな。
それは今でも一緒だろ
Windows の既定のスタックサイズは1MBのままだぞ
https://learn.microsoft.com/ja-jp/windows/win32/procthread/thread-stack-size
> Win98時代は1Mバイト程度の配列変数作っただけで動作がおかしくなってたな。
それは今でも一緒だろ
Windows の既定のスタックサイズは1MBのままだぞ
https://learn.microsoft.com/ja-jp/windows/win32/procthread/thread-stack-size
764デフォルトの名無しさん (ワッチョイ 1a63-4FAg)
2022/12/06(火) 11:30:06.24ID:PYPomZFd0 MS-DOSの頃は、メモリ1MB積んだPCってスゴイ豪華な印象だったな
搭載メモリーを使い切る様なプログラムを、オレは書けるんかって思ってた
搭載メモリーを使い切る様なプログラムを、オレは書けるんかって思ってた
765デフォルトの名無しさん (ワッチョイ 9fc2-He5u)
2022/12/06(火) 12:01:21.10ID:63yxghiR0 I/Oバンク方式かEMSかって時代か
766デフォルトの名無しさん (スッップ Sd70-AXrT)
2022/12/06(火) 14:59:37.11ID:iX2JPZR5d 本当のメインメモリとして使えたのは640kBまでで
残りの384kBはバンクかEMSの増設メモリだった
残りの384kBはバンクかEMSの増設メモリだった
767デフォルトの名無しさん (ワッチョイ 1a63-4FAg)
2022/12/06(火) 19:43:39.61ID:PYPomZFd0 最初はハードウェアで実装してたけれど
そのうち仮想86モードだったかで、
特別なハードを追加せずにメモリアクセス出来る様になってたね
そのうち仮想86モードだったかで、
特別なハードを追加せずにメモリアクセス出来る様になってたね
768デフォルトの名無しさん (ワッチョイ 463a-EnYx)
2022/12/06(火) 20:33:29.46ID:zjGx1PLy0769デフォルトの名無しさん (ワッチョイ 9fc2-He5u)
2022/12/06(火) 21:49:14.42ID:63yxghiR0 >>767
あったねー、ソフトウエアEMS>ハードウエアEMSなんて珍現象
あったねー、ソフトウエアEMS>ハードウエアEMSなんて珍現象
770デフォルトの名無しさん (ワッチョイ d9b3-SeIF)
2022/12/09(金) 05:45:28.61ID:QbuGAkRx0 #include <stdio.h>
#include <time.h>
void
main(void)
{
time_t now, now2;
now = time(NULL);
now2 = time(NULL);
struct tm *tm1 = localtime(&now);
struct tm *tm2 = localtime(&now2);
tm2->tm_mday = 1;
tm2->tm_mon = 1;
printf("%d %d\n", tm1->tm_mday, tm1->tm_mon);
printf("%d %d\n", tm2->tm_mday, tm2->tm_mon);
}
#include <time.h>
void
main(void)
{
time_t now, now2;
now = time(NULL);
now2 = time(NULL);
struct tm *tm1 = localtime(&now);
struct tm *tm2 = localtime(&now2);
tm2->tm_mday = 1;
tm2->tm_mon = 1;
printf("%d %d\n", tm1->tm_mday, tm1->tm_mon);
printf("%d %d\n", tm2->tm_mday, tm2->tm_mon);
}
771デフォルトの名無しさん (ワッチョイ d9b3-SeIF)
2022/12/09(金) 05:46:27.95ID:QbuGAkRx0 tm2を変更するとtm1も同じ値になってしまいます。
回避方法を教えて下さい。
回避方法を教えて下さい。
772デフォルトの名無しさん (ワッチョイ d9b3-SeIF)
2022/12/09(金) 05:47:05.17ID:QbuGAkRx0 OS:Linux Mint
コンパイラ:gcc です
コンパイラ:gcc です
773デフォルトの名無しさん (ワッチョイ f069-7kHv)
2022/12/09(金) 06:15:54.45ID:rdO0dbBS0 https://linuxjm.osdn.jp/html/LDP_man-pages/man3/ctime.3.html
localtime_r()を使いましょう
struct tm *tm1 = localtime(&now);
こんな使い方をするって時点でlocaltime()が「何」を返すのか、察しましょう
localtime_r()を使いましょう
struct tm *tm1 = localtime(&now);
こんな使い方をするって時点でlocaltime()が「何」を返すのか、察しましょう
774デフォルトの名無しさん (ワッチョイ d9b3-SeIF)
2022/12/09(金) 06:58:19.07ID:QbuGAkRx0 >>773
サンクス、動いた
サンクス、動いた
775デフォルトの名無しさん (ワッチョイ 9fc2-He5u)
2022/12/09(金) 07:14:28.04ID:aKtIUC7D0 このへん、言っちゃなんだけどクソだね
なんでこんな変な設計にしたんだろう
なんでこんな変な設計にしたんだろう
776デフォルトの名無しさん (ワッチョイ 2135-BGgp)
2022/12/09(金) 07:27:22.65ID:G83XZmEL0 ローカルで構造体を定義してそこへのポインタを返すとスタックから消えてデータが壊れますか?
777デフォルトの名無しさん (ワッチョイ aa01-QZbE)
2022/12/09(金) 07:54:25.65ID:DDM/thjI0778デフォルトの名無しさん (ワッチョイ aa01-QZbE)
2022/12/09(金) 07:57:34.07ID:DDM/thjI0 >>776
構造体に限らずローカル変数へのポインタを返すとポインタの指す先の内容は壊れる(かもしれない)
構造体に限らずローカル変数へのポインタを返すとポインタの指す先の内容は壊れる(かもしれない)
779デフォルトの名無しさん (スッップ Sd70-AXrT)
2022/12/09(金) 13:31:15.00ID:RVIOSi06d 未定義の動作という
780デフォルトの名無しさん (アウアウウー Sa08-g9pY)
2022/12/09(金) 15:26:27.10ID:Z1cscK2ka >>775
strtok
strtok
781デフォルトの名無しさん (ワッチョイ d8cf-R4o2)
2022/12/09(金) 15:41:02.97ID:8zaQFmsV0 何らかの要因でテンパって煮詰まってコーディングしてて
変なものができてしまうこと、皆さんも経験あるのでは
変なものができてしまうこと、皆さんも経験あるのでは
782はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9e3e-7kHv)
2022/12/09(金) 17:25:23.52ID:Qnrm7z6h0 >>776
スタックから消えるというか、言語仕様的な用語でいうと生存期間が終了していることになる。
そんでオブジェクトを生存期間の外部で参照したときの動作は未定義なので何が起こるかわからん。
C でいう未定義ってのは「何が起きてもいい」なのでデータが壊れる (意味不明の値が読みだされる) だけでは済まないかもしれない。
スタックから消えるというか、言語仕様的な用語でいうと生存期間が終了していることになる。
そんでオブジェクトを生存期間の外部で参照したときの動作は未定義なので何が起こるかわからん。
C でいう未定義ってのは「何が起きてもいい」なのでデータが壊れる (意味不明の値が読みだされる) だけでは済まないかもしれない。
783デフォルトの名無しさん (ワッチョイ 1a63-4FAg)
2022/12/09(金) 17:34:59.55ID:i/ZE6Izl0 恋と同じで、はかなく消える運命
784デフォルトの名無しさん (ワッチョイ dfad-KKgq)
2022/12/10(土) 01:00:03.41ID:ap6EnRqC0 >>776
すぐ消えないことがあるので読めてしまうかも知れない。しかし何かをすると一瞬にして破壊されて終わるかも知れない。
あてにしてはいけない。
ていうかこの頃のコンパイラってそういうのは警告出したりエラー扱いにしない?
すぐ消えないことがあるので読めてしまうかも知れない。しかし何かをすると一瞬にして破壊されて終わるかも知れない。
あてにしてはいけない。
ていうかこの頃のコンパイラってそういうのは警告出したりエラー扱いにしない?
785デフォルトの名無しさん (ワッチョイ df01-0RkQ)
2022/12/10(土) 08:35:32.63ID:0yWWcyiC0 コンパイル時に常に摘出できるわけじゃないし
786デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/10(土) 08:43:06.25ID:VZKCrGXt0 いやバグは睾丸みたいに摘出はできないだろ
787デフォルトの名無しさん (ワッチョイ 679f-NKnn)
2022/12/10(土) 11:08:12.32ID:8LaJbp4o0 warning C4172: ローカル変数またはテンポラリのアドレスを返します: hoge
VS2022
VS2022
788デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/10(土) 11:18:10.60ID:W5v0KihFa789デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/10(土) 11:34:37.41ID:FHzDIuwr0 そういうときはレジスタ変数のアドレスを返すようにコーディングしなさい
790デフォルトの名無しさん (ワッチョイ 6710-KKgq)
2022/12/10(土) 11:49:59.77ID:n733SMJ50 staticの出番は?
791デフォルトの名無しさん (アウアウウー Sa6b-uI1h)
2022/12/10(土) 12:13:19.32ID:9jPqI4Xva そして>>773の仕様となるのであった…
792デフォルトの名無しさん (ワッチョイ 679f-NKnn)
2022/12/10(土) 12:55:16.29ID:8LaJbp4o0 int *fuga(void){
register int i = 123;
return &i;
}
error C2103: '&' レジスタ変数のアドレスを得ようとしました。
ふむ
register int i = 123;
return &i;
}
error C2103: '&' レジスタ変数のアドレスを得ようとしました。
ふむ
793デフォルトの名無しさん (ワッチョイ a735-yK5Y)
2022/12/10(土) 13:24:22.34ID:HjLF/vvU0794デフォルトの名無しさん (ワッチョイ a7ad-+fsS)
2022/12/10(土) 13:32:02.53ID:GuAR5Ny/0795デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/10(土) 13:43:23.28ID:VZKCrGXt0 言いたいことはわかるけど日本語が変
左辺値はメモリアクセスを意味する式なので
レジスタに左辺値がないのではなく
記憶クラスがregisterの変数の識別子は左辺値ではない
左辺値はメモリアクセスを意味する式なので
レジスタに左辺値がないのではなく
記憶クラスがregisterの変数の識別子は左辺値ではない
796デフォルトの名無しさん (ワッチョイ a735-yK5Y)
2022/12/10(土) 13:46:04.91ID:HjLF/vvU0 >>789への疑問やろ
797デフォルトの名無しさん (ワッチョイ 8710-bPD3)
2022/12/10(土) 14:05:33.41ID:lr6mtoK80798はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/10(土) 15:12:06.94ID:brInbnm70 >>792
register 指定が付いたらアドレスを取る操作自体が出来なくなるように制限されてるよ。
配列を register 付きで宣言したらなにも出来なさ過ぎてワロタwwwというのはよくあるネタ。
(言語仕様的には配列 (の要素) へのアクセスもポインタ演算の構文等になってるから暗黙にアドレスを取る操作。)
>>794-795
左辺値であるかどうかと記憶クラスは関係ない。
必ずしもメモリにアクセスすることを意味しない。
register 宣言でアドレスを取れなくなるのは左辺値でなくなるからではなく
& のオペランドは register 付きで宣言されたものであってはならないという直接的な制約。
どこをどう見ても左辺値の定義自体には register 指定は関係しない。
更に C99 の 6.5.3.2 から単項 & の制約について抜粋
> The operand of the unary & operator shall be either a function designator, the result of a
> [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is
> not declared with the register storage-class specifier.
JIS の日本語だとこうなってる。
> 単項&演算子のオペランドは,関数指示子,[]演算子若しくは単項*演算子の結果,又は左辺値でな
> ければならない。左辺値の場合,ビットフィールドでもなく,register記憶域クラス指定子付きで宣言
> されてもいないオブジェクトを指し示さなければならない。
左辺値のときは register 指定されていてはいけないというのは逆に言えば register 指定されている左辺値というものも存在することを示唆する。
register 指定が付いたらアドレスを取る操作自体が出来なくなるように制限されてるよ。
配列を register 付きで宣言したらなにも出来なさ過ぎてワロタwwwというのはよくあるネタ。
(言語仕様的には配列 (の要素) へのアクセスもポインタ演算の構文等になってるから暗黙にアドレスを取る操作。)
>>794-795
左辺値であるかどうかと記憶クラスは関係ない。
必ずしもメモリにアクセスすることを意味しない。
register 宣言でアドレスを取れなくなるのは左辺値でなくなるからではなく
& のオペランドは register 付きで宣言されたものであってはならないという直接的な制約。
どこをどう見ても左辺値の定義自体には register 指定は関係しない。
更に C99 の 6.5.3.2 から単項 & の制約について抜粋
> The operand of the unary & operator shall be either a function designator, the result of a
> [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is
> not declared with the register storage-class specifier.
JIS の日本語だとこうなってる。
> 単項&演算子のオペランドは,関数指示子,[]演算子若しくは単項*演算子の結果,又は左辺値でな
> ければならない。左辺値の場合,ビットフィールドでもなく,register記憶域クラス指定子付きで宣言
> されてもいないオブジェクトを指し示さなければならない。
左辺値のときは register 指定されていてはいけないというのは逆に言えば register 指定されている左辺値というものも存在することを示唆する。
799デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/10(土) 15:19:28.45ID:VZKCrGXt0 > register 指定されている左辺値というものも存在することを示唆する。
具体例ある?
具体例ある?
800はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/10(土) 15:24:22.50ID:brInbnm70 >>799
具体例というか、 register 指定は左辺値か右辺値かの定義に無関係なので
左辺値なものは register 指定されていようがいまいが左辺値って話。
変数の宣言のときに register 指定を付けたら全て register 指定のついた左辺値だよ。
具体例というか、 register 指定は左辺値か右辺値かの定義に無関係なので
左辺値なものは register 指定されていようがいまいが左辺値って話。
変数の宣言のときに register 指定を付けたら全て register 指定のついた左辺値だよ。
801デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/10(土) 15:44:01.19ID:VZKCrGXt0 メモリにアクセスすることを意味するでしょ。
6.3.2.1 左辺値
左辺値が評価されたときにオブジェクトを指し示していなければ,動作は未定義とする。
3.14 オブジェクト(object) その内容によって,値を表現することができる実行環境中の記憶域の部分。
参考オブジェクトを参照する場合,オブジェクトは,特定の型をもっていると解釈してもよい(6.3.2.1 参照)。
なんでそういう決まりになっているのかを理解せずに条文の字面に書いてあることだけ表面的に言う人とは歯車が噛み合わないな。
6.3.2.1 左辺値
左辺値が評価されたときにオブジェクトを指し示していなければ,動作は未定義とする。
3.14 オブジェクト(object) その内容によって,値を表現することができる実行環境中の記憶域の部分。
参考オブジェクトを参照する場合,オブジェクトは,特定の型をもっていると解釈してもよい(6.3.2.1 参照)。
なんでそういう決まりになっているのかを理解せずに条文の字面に書いてあることだけ表面的に言う人とは歯車が噛み合わないな。
802デフォルトの名無しさん (ワッチョイ df7c-KKgq)
2022/12/10(土) 15:50:02.57ID:gyOVa4Se0 >>792みたいなのはレジスタ変数じゃなくてもやっちゃダメだけどw
803デフォルトの名無しさん (アウアウウー Sa6b-2vTk)
2022/12/10(土) 15:51:48.45ID:zHuXawkZa 昔の CPU はレジスタが少なくて
なんでもかんでも register 付けて宣言すると
CPU の持ってる実 register 数以上に宣言してしまうことが多い
では使い切った後の変数はどこに割り当てられるのか?
なんでもかんでも register 付けて宣言すると
CPU の持ってる実 register 数以上に宣言してしまうことが多い
では使い切った後の変数はどこに割り当てられるのか?
804はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/10(土) 16:30:03.16ID:brInbnm70 >>801
話を >>794 といっしょくたにしたのが誤りだった。 すまぬ。
> ハードウェアのレジスタだから
の続きで
> メモリアクセスを意味する式なので
をハードウェア的なメモリアクセスの意味で解釈してしまった。
むしろそんなん関係なく言語仕様上の意味で反論してたんだね。
(後から読む人のために補足すると C の言語仕様でいう実行環境は言語仕様で規定する仮想的な実行環境の
ことであって実際の機械語とどう対応づけるか規定されない。 どういう機械語が生成されるかは
言語の意味の根拠にならないので言語仕様で再解釈しようとしたのが >>795 だと私は解釈した。)
が、言語仕様の解釈として
> registerの変数の識別子は左辺値ではない
の部分が誤っているということには変わりないよ。
話を >>794 といっしょくたにしたのが誤りだった。 すまぬ。
> ハードウェアのレジスタだから
の続きで
> メモリアクセスを意味する式なので
をハードウェア的なメモリアクセスの意味で解釈してしまった。
むしろそんなん関係なく言語仕様上の意味で反論してたんだね。
(後から読む人のために補足すると C の言語仕様でいう実行環境は言語仕様で規定する仮想的な実行環境の
ことであって実際の機械語とどう対応づけるか規定されない。 どういう機械語が生成されるかは
言語の意味の根拠にならないので言語仕様で再解釈しようとしたのが >>795 だと私は解釈した。)
が、言語仕様の解釈として
> registerの変数の識別子は左辺値ではない
の部分が誤っているということには変わりないよ。
805デフォルトの名無しさん (ワントンキン MMbf-0RkQ)
2022/12/10(土) 21:03:51.14ID:iVr3EzOTM レジスターにもアドレスを割り当てておいたら良かったかも
806デフォルトの名無しさん (ラクッペペ MM8f-JsS5)
2022/12/10(土) 22:47:45.19ID:37vQL6PeM 昔6800系CPUはメモリの固定番地をレジスターと同格に扱うダイレクトメモリアドレッシングで見かけのレジスタ数を増やしていた
807デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/10(土) 22:55:13.62ID:FHzDIuwr0 レジスタを指すポインタをインクリメントすると、別のレジスタの値を書き換えられる、とか
808デフォルトの名無しさん (ラクッペペ MM8f-JsS5)
2022/12/10(土) 22:59:08.86ID:cw57tQlnM 組込み用の8ビットCPUでも同じような機能があるものもある
ダイレクトアドレッシング、ダイレクトページアドレッシングなど殆どは8ビットアドレスのゼロページ目をレジスタと見做して
メモリ経由することなく直接ALUで演算を行なうことが出来る
ダイレクトアドレッシング、ダイレクトページアドレッシングなど殆どは8ビットアドレスのゼロページ目をレジスタと見做して
メモリ経由することなく直接ALUで演算を行なうことが出来る
809デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/10(土) 23:32:50.32ID:FHzDIuwr0 レジスター配列とかプログラムコードをレジスタに置くとか
810デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 03:20:22.27ID:BIXjZcK80 >>804
左辺値がメモリアクセスを意味するのに?
左辺値がメモリアクセスを意味するのに?
811はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 03:56:09.23ID:ftKoc+Hh0 >>810
言語仕様では抽象計算機での動作として記述される。 (C99 なら 5.1.2.3?を参照)
記憶域として書かれているものは抽象的な意味の上での記憶域であって、
実際のメモリにアクセスするかどうかはコンパイラの裁量。
register 指定は変数の意味に関与せず、抽象機械の動作の上ではごく普通に記憶域に割り当てられているのと同じ。
その上で register 指定は「可能な限り速いアクセスを期待する」というヒントであることと、アドレスが取れなくなるという制約が付く。
register 指定は抽象機械の上での記憶域をハードウェアのレジスタに割り当てるなどして高速化してくれたらうれしいなぁ (/ω・\)チラッ
という指定であって、言語の理屈の上ではアドレスを取れない以外の何の意味も持たない。
言語仕様では抽象計算機での動作として記述される。 (C99 なら 5.1.2.3?を参照)
記憶域として書かれているものは抽象的な意味の上での記憶域であって、
実際のメモリにアクセスするかどうかはコンパイラの裁量。
register 指定は変数の意味に関与せず、抽象機械の動作の上ではごく普通に記憶域に割り当てられているのと同じ。
その上で register 指定は「可能な限り速いアクセスを期待する」というヒントであることと、アドレスが取れなくなるという制約が付く。
register 指定は抽象機械の上での記憶域をハードウェアのレジスタに割り当てるなどして高速化してくれたらうれしいなぁ (/ω・\)チラッ
という指定であって、言語の理屈の上ではアドレスを取れない以外の何の意味も持たない。
812デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 06:45:02.24ID:BIXjZcK80 抽象計算機の記憶域がメモリではないって?
もういい、あんたとは話にならん
もういい、あんたとは話にならん
813はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 06:47:07.10ID:ftKoc+Hh0 >>812
根本的には register 指定で左辺値でなくなったりはしないという話をしてるんで。
根本的には register 指定で左辺値でなくなったりはしないという話をしてるんで。
814デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 07:35:55.41ID:BIXjZcK80 その話の根拠に疑問を示したんだけど、例の屁理屈に逃げるんでもういい
815はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 08:06:06.44ID:ftKoc+Hh0 >>814
言語仕様でそうなっているという以外に根拠が必要か?
言語仕様でそうなっているという以外に根拠が必要か?
816はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 08:12:25.56ID:ftKoc+Hh0817デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/11(日) 08:25:20.92ID:BIXjZcK80 >>815
しつこい
しつこい
818デフォルトの名無しさん (ワッチョイ df01-0RkQ)
2022/12/11(日) 09:45:19.90ID:B9k8N7vL0 >>805
そういうプロセッサーはあるよ(ディスコンしてるけど)
https://i.imgur.com/Lqs3ejR.jpg
Z80 の裏レジスタは裏側のレジスタを直接触れなくてモヤモヤしたけどこいつは他のバンクのレジスタも直接さわれるからちょっと便利
PCとかもメモリー空間に見えてるプロセッサーもあったような気がするけど具体的なプロセッサー名を思い出せない
>>806
それはちょっと話が違う
単にアドレッシングモードとしてゼロページやダイレクトページが短いコードで扱えると言うだけのことでメモリーはあくまでもメモリー
例えば6800はPSH AでAレジスタをスタックにプッシュ出来るけどゼロページの内容を直接プッシュ出来るわけじゃない
6502 のインダイレクト・インデックストYぐらいの機能ならまあベースレジスタをメモリー上に置けるとは言えるけど
そういうプロセッサーはあるよ(ディスコンしてるけど)
https://i.imgur.com/Lqs3ejR.jpg
Z80 の裏レジスタは裏側のレジスタを直接触れなくてモヤモヤしたけどこいつは他のバンクのレジスタも直接さわれるからちょっと便利
PCとかもメモリー空間に見えてるプロセッサーもあったような気がするけど具体的なプロセッサー名を思い出せない
>>806
それはちょっと話が違う
単にアドレッシングモードとしてゼロページやダイレクトページが短いコードで扱えると言うだけのことでメモリーはあくまでもメモリー
例えば6800はPSH AでAレジスタをスタックにプッシュ出来るけどゼロページの内容を直接プッシュ出来るわけじゃない
6502 のインダイレクト・インデックストYぐらいの機能ならまあベースレジスタをメモリー上に置けるとは言えるけど
819デフォルトの名無しさん (ワッチョイ df01-0RkQ)
2022/12/11(日) 09:47:13.53ID:B9k8N7vL0820デフォルトの名無しさん (スッップ Sdff-c2mE)
2022/12/11(日) 10:26:09.32ID:2yXQoOg9d IDコロコロ
821はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 10:45:16.87ID:ftKoc+Hh0 >>819
べつに勝ち負けを競っているわけじゃない。
根拠 (この場合は言語仕様) に基づく解釈の妥当性がそれで変わることはないので納得しない誰かがいても不都合もない。
5ch に書き込むのはただの暇つぶしだ。
どうせほかに話題もないんだからしつこくてもいいんじゃね。
反応するかどうかは知らんけど。
べつに勝ち負けを競っているわけじゃない。
根拠 (この場合は言語仕様) に基づく解釈の妥当性がそれで変わることはないので納得しない誰かがいても不都合もない。
5ch に書き込むのはただの暇つぶしだ。
どうせほかに話題もないんだからしつこくてもいいんじゃね。
反応するかどうかは知らんけど。
822デフォルトの名無しさん (ワッチョイ e701-0RkQ)
2022/12/11(日) 11:25:34.59ID:RuZtb54i0 >>821
そういうレスは流石にしつこいわ
そういうレスは流石にしつこいわ
823デフォルトの名無しさん (ワッチョイ 87bb-3TNT)
2022/12/11(日) 15:02:48.86ID:51+9+dkC0 ブレークブレークw
824デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/11(日) 15:25:03.37ID:jc+ZhrAU0 みんな仲良くしなよ
825デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/11(日) 17:37:29.66ID:kiLLcra70 ポインタは卒業した。コンパイラあるんだから、ググるより書いて結果を見たほうが早いぞ。
何十回も繰り返せばわかるはず。
何十回も繰り返せばわかるはず。
826デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/11(日) 17:42:03.60ID:kiLLcra70 亀レスだが機械語を知らないと、いい高級言語は書けない、ってのはわからん。
機械語と高級言語は別物だろう。
機械語を簡単に理解できる知能水準の人は、高級言語を新しく学習したときも
たやすく理解できる、
というのが実態なのに、ネットでは背びれ尾ひれついて、「ハードウェアを知らないと、〜」みたいな
論調が市民権を得ているな。
機械語と高級言語は別物だろう。
機械語を簡単に理解できる知能水準の人は、高級言語を新しく学習したときも
たやすく理解できる、
というのが実態なのに、ネットでは背びれ尾ひれついて、「ハードウェアを知らないと、〜」みたいな
論調が市民権を得ているな。
827デフォルトの名無しさん (ワッチョイ df7c-KKgq)
2022/12/11(日) 18:08:31.63ID:3kpvLkL20 CやC++はアセンブラレベルが理解出来ないとそもそも実装が無茶苦茶だったりするけど
ポインタとかが無いJavaとかはそこまでアセンブラレベルでどうのこうのってのは無いが
それでもコンピュータ的な知識が皆無な奴は論理演算を理解出来なかったりするし
ビットシフトみたいなことやってると、何でこんな書き方しているの?みたいな事言う奴出てくるからなぁw
ポインタとかが無いJavaとかはそこまでアセンブラレベルでどうのこうのってのは無いが
それでもコンピュータ的な知識が皆無な奴は論理演算を理解出来なかったりするし
ビットシフトみたいなことやってると、何でこんな書き方しているの?みたいな事言う奴出てくるからなぁw
828デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/11(日) 18:39:34.39ID:jc+ZhrAU0 それがメモリー上二銅格納されてるか位は知っておいた方が良いよ
配列データをソートする時、どうやると効率的かがすぐ分かる
配列データをソートする時、どうやると効率的かがすぐ分かる
829デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/11(日) 18:40:10.49ID:jc+ZhrAU0 メモリー上にどう格納
830デフォルトの名無しさん (テテンテンテン MM8f-gr5V)
2022/12/11(日) 18:50:45.41ID:DhbhWaSTM 2の補数表現の知識は機械語の範疇だろう
スタックもそうだ
Cの仕様にスタックなんて言葉は出てこないからな
register指定も完全に機械語だ
タイマとか割り込みを扱う場合は機械語の知識も必要だな
setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
要するに機械語の知識は必要だ
スタックもそうだ
Cの仕様にスタックなんて言葉は出てこないからな
register指定も完全に機械語だ
タイマとか割り込みを扱う場合は機械語の知識も必要だな
setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
要するに機械語の知識は必要だ
831はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 19:18:24.83ID:ftKoc+Hh0 >>825
ポインタ演算は未定義動作を簡単に引き起こせてしまうので
十分に理解できてない状態で実際に動作させてみるというのはあまりあてにならない。
ある程度は理解した上で実際にやってみたら納得しやすいってことならわかるけど。
ポインタ演算は未定義動作を簡単に引き起こせてしまうので
十分に理解できてない状態で実際に動作させてみるというのはあまりあてにならない。
ある程度は理解した上で実際にやってみたら納得しやすいってことならわかるけど。
832デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/11(日) 19:19:01.91ID:HcYuyEaDa 何十年前の話題を蒸し返してるのか知らんけど今のコンパイラは賢いからregisterとか使う必要ないぞ
むしろ人間が余計な指示を出すことで効率が悪くなる可能性すらあるからハードウェアの知識が云々とかいう老害理論はパイプラインとかキャッシュとかを全て把握してから言ってくれ
君たちの時代は終わったんだよ
むしろ人間が余計な指示を出すことで効率が悪くなる可能性すらあるからハードウェアの知識が云々とかいう老害理論はパイプラインとかキャッシュとかを全て把握してから言ってくれ
君たちの時代は終わったんだよ
833デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/11(日) 19:29:49.83ID:vn3Pz69o0 register なんてあてにならんもん、使ってる奴いなかったと思うよ
本当に速くしたい所は、それこそインラインアセンブラ使ったり
アセンブルしたルーチン呼んでたし
本当に速くしたい所は、それこそインラインアセンブラ使ったり
アセンブルしたルーチン呼んでたし
834デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/11(日) 19:33:50.07ID:HcYuyEaDa >>833
コンパイラが本当に愚直な時は最適化無しで使ってたぞ
コンパイラが本当に愚直な時は最適化無しで使ってたぞ
835デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/11(日) 19:38:52.22ID:vn3Pz69o0 それは失礼した
836はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/11(日) 19:39:00.70ID:ftKoc+Hh0 少なくとも gcc とか clang くらいのモダンな処理系ではコンパイラの判断のほうが賢いわな。
低レイヤのコードだと人手で指定を付けたいときもあるかもしれんが
そういう分野ではどうせ処理系の拡張がなきゃどうにもならんので
register キーワード程度のあやふやなものひとつを言語仕様に入れてもあまり役に立たない。
C++ では register は削除された (機能は削除されたがキーワードとしては予約語のまま) わけだし、
C でもその内に削除されるんじゃないかな。
低レイヤのコードだと人手で指定を付けたいときもあるかもしれんが
そういう分野ではどうせ処理系の拡張がなきゃどうにもならんので
register キーワード程度のあやふやなものひとつを言語仕様に入れてもあまり役に立たない。
C++ では register は削除された (機能は削除されたがキーワードとしては予約語のまま) わけだし、
C でもその内に削除されるんじゃないかな。
837デフォルトの名無しさん (アウアウウー Sa6b-VZV0)
2022/12/11(日) 20:04:06.71ID:8Gp9TgZBa register なんて要らんとか昔からずーっと言われてるけど
つけたらつけたで速くなったのその目で見たやつも居るでしょ?
gcc と gprof だけで頑張ってたとき確かに速くなったけど
だから register は有効有用使うべきとは言わないけどね
つけたらつけたで速くなったのその目で見たやつも居るでしょ?
gcc と gprof だけで頑張ってたとき確かに速くなったけど
だから register は有効有用使うべきとは言わないけどね
838デフォルトの名無しさん (ワッチョイ a7e6-JdnI)
2022/12/11(日) 21:31:25.77ID:OhnENqmv0 >>830
>setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
基本スタックポインタとプログラムカウンタだけだと思っていましたが、まあレジスタ全部と他何を保存してましたっけ?
>setjmp longjmpも何が保存されてるのか理解するには機械語の知識が必要だ
基本スタックポインタとプログラムカウンタだけだと思っていましたが、まあレジスタ全部と他何を保存してましたっけ?
839ハノン ◆QZaw55cn4c (ワッチョイ a7e6-JdnI)
2022/12/11(日) 22:26:47.72ID:OhnENqmv0840デフォルトの名無しさん (テテンテンテン MM8f-gr5V)
2022/12/11(日) 22:34:58.44ID:IkAIpxjPM841デフォルトの名無しさん (ワッチョイ 27c2-aipL)
2022/12/12(月) 06:30:06.98ID:ychPXO7Q0 メジャーどころのCPUは大抵、戻り値はレジスタだね
842デフォルトの名無しさん (ラクッペペ MM8f-JsS5)
2022/12/12(月) 07:28:31.07ID:v0et11DOM843デフォルトの名無しさん (スフッ Sdff-qs7g)
2022/12/12(月) 14:27:00.05ID:Y3syqvcfd static記憶クラス指定子の理解はできますが、いざプログラムを組んでみると、使い方がわかりません。
844デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/12(月) 14:36:59.78ID:jnrvptAKa >>841
CPU関係あるか?
CPU関係あるか?
845デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/12(月) 14:37:08.19ID:RmZ1ojDx0 わかるものを使えばいいよ
846デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 15:05:24.79ID:BWUj5Mhq0 意訳
メジャーどころのCPU(に対応したCコンパイラ)は大抵、戻り値はレジスタだね
ではないかと
VCだとコンパイルオプションで変化した記憶がある
メジャーどころのCPU(に対応したCコンパイラ)は大抵、戻り値はレジスタだね
ではないかと
VCだとコンパイルオプションで変化した記憶がある
847はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/12(月) 16:42:43.35ID:J7ftRWn10 >>844
呼び出し規約 (を含む ABI) の策定はアーキテクチャを設計したところが主導するもんじゃないのかな。
CPU の特性に反した使い方を基本にされても困るだろうし。
ざっと調べた感じだとよく使われている System V ABI はインテルが議長の委員会で決める体制っぽい。
マイクロソフト (Windows) は引数の渡し方がちょっと違う規約でやってて
文句も出てない (出てないよね?) からそんなに強い強制力があるわけでもないんだろうけど、
CPU ごとに常識的な使い方というものはあるだろう。
呼び出し規約 (を含む ABI) の策定はアーキテクチャを設計したところが主導するもんじゃないのかな。
CPU の特性に反した使い方を基本にされても困るだろうし。
ざっと調べた感じだとよく使われている System V ABI はインテルが議長の委員会で決める体制っぽい。
マイクロソフト (Windows) は引数の渡し方がちょっと違う規約でやってて
文句も出てない (出てないよね?) からそんなに強い強制力があるわけでもないんだろうけど、
CPU ごとに常識的な使い方というものはあるだろう。
848デフォルトの名無しさん (ワッチョイ 7fcf-FUlb)
2022/12/12(月) 16:59:57.60ID:RmZ1ojDx0 B言語でも戻り値はレジスタだったし
849デフォルトの名無しさん (アウアウウー Sa6b-Fzhe)
2022/12/12(月) 19:01:13.79ID:xR631HBma >>847
マイクロソフトが作ってるハードはSurfaceとかだろ?
マイクロソフトが作ってるハードはSurfaceとかだろ?
850デフォルトの名無しさん (ワッチョイ df36-KKgq)
2022/12/12(月) 19:19:51.33ID:m7KoqGgA0 DOS時代にグラフィックライブラリとかをMASMでアセンブルして出来たobjファイルを
Cコンパイラで作ったobjとをリンクさせて
Cからアセンブラのルーチン呼び出したりしてたけど、
COBOLやFORTRANで作った関数をリンクさせて
Cで呼び出したりも出来るの?
Cコンパイラで作ったobjとをリンクさせて
Cからアセンブラのルーチン呼び出したりしてたけど、
COBOLやFORTRANで作った関数をリンクさせて
Cで呼び出したりも出来るの?
851デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 19:31:09.72ID:BWUj5Mhq0 FORTRANなら呼べると思うが、COBOLは分からない
FORTRANやCOBOLからならCの関数は呼べたと思う
FORTRANやCOBOLからならCの関数は呼べたと思う
852デフォルトの名無しさん (ワッチョイ df7c-KKgq)
2022/12/12(月) 19:34:09.58ID:2yJi4NkT0 objファイルは流石に無理があるけどDLLや静的ライブラリでも作れば良いだけでは?
gfortranならexe以外にもDLL等が作成出来る
gfortranならexe以外にもDLL等が作成出来る
853デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 19:37:26.25ID:BWUj5Mhq0 受け渡しのデータ型も割と近くないかな?
854デフォルトの名無しさん (ワッチョイ a701-3npV)
2022/12/12(月) 19:39:34.73ID:qCai2YYC0 引数の積みかたやらスタックフレームの巻き戻しはどっちがやるか等の約束事が
シンプルに固定されてるDLLなら他所言語への持ち出しや持ち入れがやりやすいわね
シンプルに固定されてるDLLなら他所言語への持ち出しや持ち入れがやりやすいわね
855デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/12(月) 20:17:18.59ID:munrOkPw0 >>828 まあ・・C言語を触るぐらいだから、一般的には大学とかのコンピュータサイエンス教科を
履修しているのが前提だろうから、そこはあえて省略したのですが・・
昔の高校生は頭がよかったけど。
今は「仕事でC言語を触らせてくれる身分」になるためには基本、情報系の大卒でしょうし・・
履修しているのが前提だろうから、そこはあえて省略したのですが・・
昔の高校生は頭がよかったけど。
今は「仕事でC言語を触らせてくれる身分」になるためには基本、情報系の大卒でしょうし・・
856デフォルトの名無しさん (ワッチョイ a705-u86g)
2022/12/12(月) 20:18:59.06ID:munrOkPw0 >>828 配列のソートってメモリ意識しますかね。フラグメンテーションとか考えたこともないな・・。
単純に演算オーダー(log O^n とか・・)そんな感じである程度予測を立てて、あとは扱うデータ次第かと。
単純に演算オーダー(log O^n とか・・)そんな感じである程度予測を立てて、あとは扱うデータ次第かと。
857はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/12(月) 21:58:34.14ID:J7ftRWn10 アルゴリズムのレベルではある程度の効率は事前に考えるけど
断片化とかキャッシュヒットとかはチューニングが必要な状況になるまで考えないな。
むしろ考慮したくなっても意識的に忘れるようにする。
いわゆる「早すぎる最適化」の一種だから。
当然ながら必要になったときには知っている必要はあるんだけどそんな機会は多くないよね。
普通の (アルゴリズムのレベルでは充分に配慮された) プログラムを書いて極端に効率が悪いようなら
メモリアロケータやキャッシュの設計のほうが悪い。
(そうは言っても目の前にあるものがそうなってるなら自分のほうが合わさないとしょうがないんだろうけどさ……)
断片化とかキャッシュヒットとかはチューニングが必要な状況になるまで考えないな。
むしろ考慮したくなっても意識的に忘れるようにする。
いわゆる「早すぎる最適化」の一種だから。
当然ながら必要になったときには知っている必要はあるんだけどそんな機会は多くないよね。
普通の (アルゴリズムのレベルでは充分に配慮された) プログラムを書いて極端に効率が悪いようなら
メモリアロケータやキャッシュの設計のほうが悪い。
(そうは言っても目の前にあるものがそうなってるなら自分のほうが合わさないとしょうがないんだろうけどさ……)
858ハノン ◆QZaw55cn4c (ワッチョイ a7e6-JdnI)
2022/12/12(月) 22:18:23.35ID:1Of7Vyge0 >>847
win32api はなぜ PASCAL にしたんでしょうかね?
win32api はなぜ PASCAL にしたんでしょうかね?
859ハノン ◆QZaw55cn4c (ワッチョイ a7e6-JdnI)
2022/12/12(月) 22:21:28.35ID:1Of7Vyge0 >>847
AMD64 は AMD が呼び出し規約まで決めちゃったけれども、普通は OS 屋が決めるものという気がしますけどね
AMD64 は AMD が呼び出し規約まで決めちゃったけれども、普通は OS 屋が決めるものという気がしますけどね
860はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-3TNT)
2022/12/12(月) 23:05:07.66ID:J7ftRWn10 >>839
register というキーワードが将来に転用 (repurposing) 出来るようにというのは書かれている。
https://timsong-cpp.github.io/cppwp/n4659/diff.cpp14.dcl.dcl
auto という名前が新しい用途にぴったり (少なくとも不自然ではない) なので
それと同じくらいに register という名前が丁度良い場面というのは全く想像がつかないんだけど
思いもよらぬ形で上手いこと使われることはあるかもしれんね。
メンバ関数の宣言のときの default とか delete とかも考えたやつは天才じゃん……と私は思ったよ。
register というキーワードが将来に転用 (repurposing) 出来るようにというのは書かれている。
https://timsong-cpp.github.io/cppwp/n4659/diff.cpp14.dcl.dcl
auto という名前が新しい用途にぴったり (少なくとも不自然ではない) なので
それと同じくらいに register という名前が丁度良い場面というのは全く想像がつかないんだけど
思いもよらぬ形で上手いこと使われることはあるかもしれんね。
メンバ関数の宣言のときの default とか delete とかも考えたやつは天才じゃん……と私は思ったよ。
861デフォルトの名無しさん (ワッチョイ 7f63-KKgq)
2022/12/12(月) 23:08:20.90ID:BWUj5Mhq0 switch文のdefaultはたまに綴りを間違えてしまうw
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国民 居住目的でない住宅所有者に「空室税」課せる法案を提出 ★2 [少考さん★]
- 「働いて働いて」の流行語大賞に懸念 「言葉が独り歩き」 過労自殺遺族 [尺アジ★]
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★3 [Hitzeschleier★]
- 【画像】消えた美人女優 上原多香子さん(42)、沖縄で目撃される [牛丼★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は ★2 [蚤の市★]
- バイク事故で入院ゆたぼん、見舞金「1円」振り込みの名義に衝撃「悲しい人ですね」「こういう人がいるから…」 [muffin★]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★2
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★1
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★2
- 【高市悲報】JA、発狂www「臨時に経費率を下げるので、どうかお米券を使ってください」 [246620176]
- 小林よしのり先生が橋下徹・玉川徹らと歴史的和解 「全体主義に負けずに高市早苗批判をしている彼らを見直した」 [309323212]
- 『丸源ラーメン』👈👈どう思う!? [153490809]
