- 1 名前:デフォルトの名無しさん (ワッチョイ 0f63-sFbk) mailto:sage [2023/04/21(金) 14:05:20.18 ID:rqj2HSDF0.net]
- !extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください) C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C17 www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C23 最新ドラフト https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 160 https://mevius.5ch.net/test/read.cgi/tech/1672191630/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 635 名前:デフォルトの名無しさん (ワッチョイ 23f0-BDBD) mailto:sage [2023/09/06(水) 19:45:03.72 ID:r3vK0XzD0.net]
- 昔の大型計算機でcharが64bitのがあったはず
- 636 名前:デフォルトの名無しさん (ワッチョイ cf63-yzHn) mailto:sage [2023/09/06(水) 20:55:53.98 ID:6iN9QRCz0.net]
- 最初のUNIX開発マシン、DECの PDP-7 は18ビットだった
- 637 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy) mailto:sage [2023/09/07(木) 00:34:19.14 ID:n7kUX99P0.net]
- C の仕様では正数型の表現にパディングビットの存在を許しているんだけど値の表現に関わらない無意味なビット(特殊なフラグとかに使うのか?)が存在するアーキテクチャも、見たことはないけど C の仕様で想定している以上はたぶんあるんだろうな……
- 638 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy) mailto:sage [2023/09/07(木) 00:34:47.43 ID:n7kUX99P0.net]
- 誤植
正数→整数
- 639 名前:デフォルトの名無しさん (ワッチョイ 23f0-BDBD) mailto:sage [2023/09/07(木) 08:06:18.17 ID:YzioMxaL0.net]
- >>635
小数なら身近にあるね
- 640 名前:デフォルトの名無しさん (ワッチョイ ff97-EEOY) mailto:sage [2023/09/07(木) 12:49:26.03 ID:6eZunc+30.net]
- 隣で寝ている
- 641 名前:デフォルトの名無しさん (ワッチョイ 0f01-e7Rb) [2023/09/16(土) 10:51:51.48 ID:S5cqLcA00.net]
- T,o,k(迷惑という方は←をあぼーんしてください。)
更に家族友人にも教えて加えて¥4000×人数をGETできます https://i.imgur.com/dGH5X8i.jpg
- 642 名前:デフォルトの名無しさん (アウアウウー Sa53-HRje) [2023/09/16(土) 12:25:15.03 ID:RATZO/gia.net]
- しね
- 643 名前:デフォルトの名無しさん (ワッチョイ 0f01-R46v) mailto:sage [2023/09/16(土) 12:35:05.81 ID:n1ZKqkE80.net]
- >>639
PayPayに変換できるって知らなかった
- 644 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/16(土) 12:38:47.03 ID:NMUMDiAt0.net]
- あそこはEUから莫大な賠償金請求されたから、必死なんだろう
- 645 名前:デフォルトの名無しさん (ワッチョイ 3fad-xbk3) [2023/09/16(土) 12:48:52.21 ID:8u+hT5wA0.net]
- >>639
グロ
- 646 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 10:15:48.77 ID:wJrbx3oK0.net]
- なあ、いつから子関数内で宣言した自動変数を戻り値に使って親関数で参照してもアクセスエラーにならなくなったんだ?
特に構造体とか
- 647 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/22(金) 10:51:22.61 ID:tfij4Zir0.net]
- 自動変数を参照渡ししてるのか?
- 648 名前:デフォルトの名無しさん (ワッチョイ 3f65-V30e) mailto:sage [2023/09/22(金) 11:07:25.29 ID:8SLDLfd50.net]
- アクセスエラーってのが実行時の話なら動作環境教えてくれないとなんとも
- 649 名前:デフォルトの名無しさん (ワッチョイ 4f93-uKg7) mailto:sage [2023/09/22(金) 11:08:43.04 ID:X0VLPMl/0.net]
- すんません何を言ってるのか分からん
自動変数のアドレスを返す話? OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは) エラーになって欲しいのにならなくて 同僚がアホで困ってて 強制的にエラーにしたいって話?
- 650 名前:デフォルトの名無しさん (ワッチョイ 0f10-NfV8) mailto:sage [2023/09/22(金) 11:13:15.28 ID:z1xJQo5k0.net]
- 数年に1回ほぼVC++でほぼCのコード書いてコンパイルしてるけど、
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。 変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・ 警告でいいやん。
- 651 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/22(金) 11:16:56.77 ID:tfij4Zir0.net]
- 構造体で返すにしても、呼出元って用意した変数なり構造体で受け取るんだろう
- 652 名前:デフォルトの名無しさん (ワッチョイ 3fad-d4nU) [2023/09/22(金) 11:27:24.08 ID:ZXfr4S/70.net]
- >>644
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。 なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。
- 653 名前:デフォルトの名無しさん (ワッチョイ 7f63-VRQG) mailto:sage [2023/09/22(金) 11:28:55.72 ID:tfij4Zir0.net]
- 共用体で渡したときは、どのメンバー使ってコピーするの?
- 654 名前:デフォルトの名無しさん (アウアウウー Sa53-9C00) [2023/09/22(金) 12:01:20.53 ID:dkRHHNCea.net]
- 池沼か
- 655 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 12:15:37.49 ID:wJrbx3oK0.net]
- >>650
処理系によってはポインター渡しになってたはず 自動変数はスタック上に領域確保するので 実体渡しじゃ無いとスタック壊れてるよね?
- 656 名前:デフォルトの名無しさん (ブーイモ MM5f-C+1d) mailto:sage [2023/09/22(金) 12:21:54.90 ID:+zFc5v5MM.net]
- 初期K&Rじゃ構造体returnはなくてポータブルC以降じゃね?
- 657 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB) mailto:sage [2023/09/22(金) 14:01:49.98 ID:jd4xXbI20.net]
- 構造体を返却値にするときは、
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では 呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。 用意された領域の上に最初から値を直接に構築できることもあるので そういうときはコピーコストは発生しない。 単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。
- 658 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 14:35:59.04 ID:wJrbx3oK0.net]
- 戻り値に構造体を使いたいんですぅ
- 659 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 14:53:23.56 ID:HzXlnxdE0.net]
- 参照てか自動変数へのポインタを戻してたってこと?
struct foo * hoge() { struct foo body; retrun &body; } これ未定義だからどうとでもなってしまうんじゃなかったかな… コンパイラが気を利かしてエラーや警告にするのも そのまま実行コードを生成して想定外の動きをするのも
- 660 名前:デフォルトの名無しさん (アウアウウー Sa53-9C00) [2023/09/22(金) 15:05:47.80 ID:dkRHHNCea.net]
- >>656
これでいいだろ struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){ 何かする return param0; }
- 661 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 15:07:59.94 ID:wJrbx3oK0.net]
- 受ける側が用意しなあかんかぁ
- 662 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:08:23.02 ID:HzXlnxdE0.net]
- >>657 のは、OS側のメモリに対する不正アクセスに引っかかって
エラー発報になるのは少ないんじゃないかな? (戻りの自動変数のポインタが不正アクセスになる可能性は低い) 構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する struct foo { struct foo* next; int body; }; こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値 ret->next->body でメモリの不正アクセス
- 663 名前:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz) [2023/09/22(金) 15:09:39.40 ID:wJrbx3oK0.net]
- 割り込み処理があると簡単に死ぬよ
- 664 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:10:08.95 ID:HzXlnxdE0.net]
- ハイコストなのをわかってて実体をそのまま返すことはあった
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね
- 665 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:11:28.51 ID:HzXlnxdE0.net]
- >>661
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ
- 666 名前:デフォルトの名無しさん (スッップ Sd5f-8KNq) mailto:sage [2023/09/22(金) 15:14:27.76 ID:wMC0ce2ad.net]
- >>653
返値用にもスタックが用意されてる 特にサイズが自由に定義できる構造体では戻り値にレジスタは使えんだろう
- 667 名前:デフォルトの名無しさん (ワッチョイ 7fab-fp56) mailto:sage [2023/09/22(金) 15:27:37.08 ID:HzXlnxdE0.net]
- ID:wJrbx3oK0 がどういう環境で愚痴ってるのかはわからんけど
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら 極力スタックは少なくしたい って話に行き着くけども それならなおさら器は呼び出し側で用意すべし になるよなぁ 最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも
- 668 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB) mailto:sage [2023/09/22(金) 15:30:18.99 ID:jd4xXbI20.net]
- 似たような話題が出たことがあるような気がしたので思い返してみると C++ スレの話だったわ。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから 最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、 たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。
- 669 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) [2023/09/23(土) 10:05:20.89 ID:i9fpyxKga.net]
- thisのことですか
- 670 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/23(土) 10:39:49.55 ID:ALqEUzvh0.net]
- >>667
返却値のこと。 コンストラクタの場合は結果的に this でもあるとは言えるけど
- 671 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/23(土) 18:43:05.31 ID:lGebHJu00.net]
- c言語にthisは無い
- 672 名前:デフォルトの名無しさん (スッップ Sdaa-cHxT) mailto:sage [2023/09/23(土) 19:21:52.16 ID:h4supWEzd.net]
- thisはポインタなので実体を返すとか言う話とは関係ない
- 673 名前:デフォルトの名無しさん (ワッチョイ 8661-gIzx) mailto:sage [2023/09/23(土) 21:37:44.48 ID:wNThSPil0.net]
- x86-64のABIでは、16byte未満はレジスタで渡されて、それ以上はメモリコピーが発生する、それだけ
- 674 名前:デフォルトの名無しさん (ワッチョイ bb48-NSUt) mailto:sage [2023/09/24(日) 01:41:30.54 ID:XDqOvN5B0.net]
- PODっていうんだっけ
構造体が値わたしになるやつ これはC++だったかな?Cはよくわからん
- 675 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) [2023/09/24(日) 09:28:36.38 ID:2YTVyUlCa.net]
- レジスタが64bit=8bytes
レジスタが128bit=16bytes たしかにレジスタで全部返せるな
- 676 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/24(日) 09:55:18.81 ID:D6DOZoEp0.net]
- そのうち無限長レジスタ出てくるだろ
- 677 名前:デフォルトの名無しさん (ワッチョイ 8a79-aeRl) mailto:sage [2023/09/24(日) 11:19:45.97 ID:Cw9+et/n0.net]
- 映画化決定 鬼滅の刃 - 無限長レジスタ編
- 678 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/24(日) 11:48:58.25 ID:wtxuVbIF0.net]
- >>672
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。 それが POD。 C++ の POD のことも慣例で構造体と呼んでると思うので、 C の構造体 ≒ C++ の POD みたいな感じ。 POD は値渡しがどうこうとは無関係。
- 679 名前:デフォルトの名無しさん (スッップ Sdaa-cHxT) mailto:sage [2023/09/24(日) 18:47:28.19 ID:zJPvjQK3d.net]
- >>674
あえてマジレスすると RISCはレジスタ減らす傾向があるのでそれはない 近年のCPUはキャッシュがバカでかいのでレジスタを大きくする必要はあんまりない
- 680 名前:デフォルトの名無しさん (ワッチョイ 0761-+HDL) mailto:sage [2023/09/24(日) 19:03:57.96 ID:SWucSPIu0.net]
- Plain Old Data だね。
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい 最新のC++はPODっていう呼び名を廃止したんじゃ無かった?
- 681 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/24(日) 19:10:57.73 ID:wtxuVbIF0.net]
- >>678
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので 「POD がなくなった」と言えるかどうかはちょっと微妙なところ。
- 682 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/24(日) 19:39:45.99 ID:iqjAJ+9f0.net]
- >>674
無限では無いけど VLIW って聞いた事無いのかw❤
- 683 名前:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf) mailto:sage [2023/09/24(日) 19:54:27.01 ID:9leOLZhk0.net]
- >>680
レジスタ長を関係あるか?
- 684 名前:デフォルトの名無しさん (ワッチョイ 0a30-gIzx) mailto:sage [2023/09/24(日) 22:05:30.32 ID:/fHwRuZw0.net]
- >>680
Very Long Instruction Word(超長い命令長)で、レジスタ関係無し
- 685 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/24(日) 22:12:32.99 ID:D6DOZoEp0.net]
- レジスターを実メモリーサイズに拡張し、実メモリーを廃止
プログラムはレジスターに
- 686 名前:直接ロード、
データは必要に応じたサイズを割り当てる 一種のチューリングマシン [] - [ここ壊れてます]
- 687 名前:デフォルトの名無しさん (ワッチョイ de6a-6sCR) mailto:sage [2023/09/24(日) 22:31:37.22 ID:fu7DWNWn0.net]
- 昔、ルネサスH8だったと思うが、関数内で大きなconst配列を定義したところ、RAM不足のビルドエラーに。
constならROM領域に割り付けるんじゃないのと思いルネに聞いたところ「言語仕様上static変数はconstの有無によらずRAMに割り付けることになってる…」とかいう回答。 Cの規格では割付領域まで規定してるのですかね。 void func(void){ static const char LARGE_TABLE[1024]={...}; ... }
- 688 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 00:05:56.55 ID:flE1dY0R0.net]
- Cコンパイラじゃ無くて、リンカに領域指定するんだけどなぁ
- 689 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p) mailto:sage [2023/09/25(月) 00:12:22.79 ID:ubRrbZbh0.net]
- 処理系定義も広義には言語仕様と言えなくもないんじゃね。
まあ普通は言わんが……
- 690 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 00:13:31.19 ID:flE1dY0R0.net]
- section切ってアドレス指定だろ?
- 691 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/25(月) 00:23:33.45 ID:Sev0Fg0J0.net]
- >>684
K&Rは定数文字列書換出来るよ。 組込に向かないって言われた理由や
- 692 名前:デフォルトの名無しさん (ワッチョイ 3b93-gtrM) mailto:sage [2023/09/25(月) 00:26:21.67 ID:Sev0Fg0J0.net]
- >>681
メモリをレジスタとして扱う技術が無いなら、無関係だろうな。 マイコンだけがコンピューターのアーキテクチャじゃ無いからね
- 693 名前:デフォルトの名無しさん (ワッチョイ 8a79-aeRl) mailto:sage [2023/09/25(月) 00:49:29.60 ID:h8TBNStf0.net]
- H8のフラッシュは書き込み回数が少ないからじゃないかな
その代わり数MBのDRAMモジュール繋いで実行できたから当時のマイコンにしては組み込みlinuxが乗ったりして富豪プログラミングができた
- 694 名前:デフォルトの名無しさん (ワッチョイ dee4-+EvS) mailto:sage [2023/09/25(月) 07:20:40.16 ID:4OYJzvHn0.net]
- >>684
そんな規定は無い。実装の都合としてもわざわざRAMに置いてうれしいこともなさそう。 「言語仕様上自動変数はconstの有無によらずRAMに割り付ける」ならありそうな話なので あなたの記憶違いの可能性のほうが高そう。
- 695 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/25(月) 08:15:02.48 ID:bQMRfZQJM.net]
- 組込みマイコンでconst変数をROMに割り当てるのはスタートアップルーチンの仕事
main関数呼び出し前に実行する処理なので一旦main関数を呼び出してしまった後はROM領域に変数を割り当てる手段はない
- 696 名前:684 (ワッチョイ 1a91-6sCR) mailto:sage [2023/09/25(月) 09:01:11.94 ID:8uqw4GxL0.net]
- 皆さんありがとう。
>>691 当たりでした。よく思い返したらそうでした。 void func(void){ const char LARGE_TABLE[1024]={...}; ... } 最初にこう書いたらRAM領域割付になり、結果staticをつけて対処した、のでありました。 で、>>692 のために自動変数はRAM割付なのですね。
- 697 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 09:20:03.53 ID:flE1dY0R0.net]
- なんか、トンチンカンな話ばかりで笑えるなぁ
ROMに割り付けるはRAMに割り付けるかは リンカーにどう指示するかによるだけだろ 起動後にROMからRAMにコピーするか そのままROMに置いとくかはデータの属性によって リンカーがグループ化してくれたものを 起動時にスタートアップルーチンが転送するだけ
- 698 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 09:24:07.97 ID:flE1dY0R0.net]
- 基本的に初期値を持つ変数は元の値はROMにあるから
幾らでも呼び出せるが、普通の手段では呼び出せないだけ 強制的にアドレス指定すれば幾らでも呼べる
- 699 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/25(月) 09:25:15.48 ID:oaSGqRXsM.net]
- メモリ空間の変数の割り当てはスタートアップルーチンのコーディングで指定する
当然C言語ではなくマイコンメーカー指定の独自言語 大体はただパラメータを設定していくだけだけど
- 700 名前:デフォルトの名無しさん (ワッチョイ 07db-oBwi) [2023/09/25(月) 09:41:12.99 ID:flE1dY0R0.net]
- つか、ROM上に変数なんか置かないから、置くのは定数
- 701 名前:デフォルトの名無しさん (ワッチョイ 8e86-NsvJ) [2023/09/25(月) 09:58:06.95 ID:jZAmQlvo0.net]
- >>674
まあ、プログラムの高速化的には2048bitSIMDか4096bitSIMDレジスタがあると高速化の観点ではかなり都合が良い。AVX2は256bitだから単純計算すると性能が8倍とか16倍とかになるからね。 産業用だとarmのCPUに2048bit長のsimdレジスタがあった気がする。
- 702 名前:デフォルトの名無しさん (ワッチョイ 0aa1-oBwi) [2023/09/25(月) 10:11:14.07 ID:8PlaAgAt0.net]
- 値を変更しない変数は〜
https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrxaac0104y.html 誰が嘘を書いたか
- 703 名前:デフォルトの名無しさん (ワッチョイ 0aa1-oBwi) [2023/09/25(月) 10:14:30.53 ID:8PlaAgAt0.net]
- ああ、staticか…なら仕方ない
- 704 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) mailto:sage [2023/09/25(月) 12:55:53.24 ID:RmxLVxNPa.net]
- >>693 が描いたシステムは使いたくないな
- 705 名前:デフォルトの名無しさん (ワッチョイ dee4-+EvS) mailto:sage [2023/09/25(月) 18:22:37.93 ID:4OYJzvHn0.net]
- >>693
自動変数がRAMに割り付けられるのは、再帰のたびに別アドレスとしなければならない規定があるから。 (逆に static なら同一アドレスとしなければならない。) >692,696 (たぶん同一人物)は ROM/RAM 割り当てがスタートアップルーチンの仕事というが、 仮にそれが正しいとするとスタートアップルーチンはどこからロードするのかという、 おかしな話が出てくるので誤りと考えられる。 実際ルネサスツールでもリンカで指定するものとなっている。 https://www.renesas.com/jp/ja/document/mat/h8s-h8300-series-cc-compiler-package-ver700-users-manual > 最適化リンケージエディタでは、入力オブジェクトプログラム内の同一セクションを結合し、 > start オプションによって指定されたアドレスに割り付けます。
- 706 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/25(月) 19:02:56.98 ID:ULcnNiWhM.net]
- スタートアップルーチンは内蔵フラッシュメモリ(かマスクROM)に記録されておりベクターテーブル(スタートアップの一部)にリセット割込みのエントリーアドレスを格納しておく
マイコンの電源ONでリセット割込みが発生するとスタートアップルーチン先頭からプログラムカウンタに沿って実行されメモリ変数やスタック領域、SFRの初期設定を行い最後にCのメイン関数が呼び出される
- 707 名前:デフォルトの名無しさん (スッップ Sdaa-cHxT) mailto:sage [2023/09/25(月) 21:31:01.48 ID:SHu1A0tUd.net]
- >>697
const って何の略でしょう
- 708 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-MH8p) mailto:sage [2023/09/25(月) 22:04:58.79 ID:ubRrbZbh0.net]
- >>704
C の変数は const を付けても (C の用語で言うところの) 定数にはならない。 C++ では異なるし、言語仕様の定義でなく単に事前に与える値くらいのニュアンスで定数という用語を使っている解説とかもあって混乱しやすい用語ではある。
- 709 名前:デフォルトの名無しさん (ワッチョイ 8aad-/va4) [2023/09/26(火) 00:22:01.41 ID:+uZUPLZA0.net]
- const の変数は値の変更が不可能なので、それを利用してコンパイラが最適化することも出来るというだけで、必ず最適化しなければならないとかROMに割り付けなければならないみたいな決まりはない筈。
- 710 名前:デフォルトの名無しさん (ワッチョイ 6b01-PB4I) [2023/09/26(火) 00:49:13.67 ID:h6rxe/Hl0.net]
- RAM2KBの環境ではROMに割り付けてもらわないと非常に困る
- 711 名前:デフォルトの名無しさん (ワッチョイ 07e5-+HDL) mailto:sage [2023/09/26(火) 01:39:36.71 ID:kR568CEo0.net]
- >>707
ならそうしなさいよ、リンカスクリプトで という話では?
- 712 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/26(火) 06:43:01.34 ID:9+lSh1ncM.net]
- 組込みで定数を扱うならdefine定義でソースに埋め込むのが普通
constはregisterと同じ扱いなので>>706
- 713 名前:フ言うとおり []
- [ここ壊れてます]
- 714 名前:デフォルトの名無しさん (ワッチョイ 0703-oBwi) [2023/09/26(火) 09:03:17.82 ID:HGB+okJ70.net]
- いまどきのROM化環境のC言語にゃsectionで領域グループを指定する命令は無いのけ?
- 715 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/26(火) 10:31:51.31 ID:HDnmN3YRM.net]
- >>699のマイコンの場合だと
スタートアップ https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0000y.html コーディング例 https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V4.01.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx08c0400y.html#82903
- 716 名前:デフォルトの名無しさん (ワッチョイ 1ecf-44ew) mailto:sage [2023/09/27(水) 00:11:11.81 ID:mIITHIHe0.net]
- セクションの初期化を割り当てというから混乱するんだろう
割り当てはリンク時にもう全部終わってる
- 717 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/27(水) 01:37:20.19 ID:tguPsVh8M.net]
- 静的な変数はリンク時はextern宣言で外部定義しておきスタートアップルーチンでセクション割当てすることでメモリ配置を確定させるのが一般的
リンクリストで自動変数以外のすべての使用変数を漏れなく割当てできているか確認する必要がある
- 718 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/27(水) 09:48:51.32 ID:I/ozjFX50.net]
- 人間様はリンカーにセクション配置アドレスを教えるのが仕事だった時代もありました
- 719 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 10:10:54.01 ID:lrg7uRD+0.net]
- ハードウェア上のメモリー配置を教えるのは、いまでも人間なんじゃないの?
- 720 名前:デフォルトの名無しさん (ワッチョイ 0a1f-oBwi) [2023/09/27(水) 10:12:59.72 ID:I/ozjFX50.net]
- >>715
ワンチップマイコンなら型番から自動で割り当ててくれるよ まあ、外付けメモリ分は手動だけどな
- 721 名前:デフォルトの名無しさん (ラクッペペ MMc6-se1G) mailto:sage [2023/09/27(水) 11:19:15.53 ID:0hujVwVvM.net]
- 静的変数と自動変数(スタック領域)の容量の割り当ての最終的な決定は人間の仕事
あまり変数に領域を取りすぎるとスタックの分が無くなる
- 722 名前:デフォルトの名無しさん (ワッチョイ 3b15-cHxT) mailto:sage [2023/09/27(水) 11:22:42.10 ID:rbbJx+dJ0.net]
- >>714
組み込みでそんな優雅なこと言ってたらバグも直せん
- 723 名前:デフォルトの名無しさん (ワッチョイ a310-WMZf) mailto:sage [2023/09/27(水) 11:23:26.71 ID:Rw0J2Yjq0.net]
- 昔のトラブルの癖で1Mバイト以上の領域、配列が必要ならmallocで確保するようにしてる・・・。
- 724 名前:デフォルトの名無しさん (ラクッペペ MMc6-7af3) mailto:sage [2023/09/27(水) 11:53:58.81 ID:8vHXVA1WM.net]
- mallocは64KBまでだろ……
- 725 名前:デフォルトの名無しさん (ワッチョイ 6a95-+EvS) [2023/09/27(水) 12:26:49.33 ID:9Ywamwi50.net]
- ・・・16bit?オフセットアドレス範囲?
- 726 名前:デフォルトの名無しさん (アウアウウー Sacf-PB4I) [2023/09/27(水) 13:10:05.87 ID:OOPn+kCla.net]
- 8086の時代だろ
EMSのページング
- 727 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 15:08:08.13 ID:lrg7uRD+0.net]
- いやそれ以前のCPUの仕様
- 728 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/27(水) 16:10:06.49 ID:OOPn+kCla.net]
- それ以前だと本体メモリでも64kBフル積んでるの少なくないか
- 729 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 16:12:57.75 ID:lrg7uRD+0.net]
- 8086積んでた当時のPCは128程度は積んでたと思うが
64でフルになるのはZ80のような8ビットPCでの話
- 730 名前:デフォルトの名無しさん (アウアウウー Sacf-j351) [2023/09/27(水) 16:25:12.39 ID:OOPn+kCla.net]
- それ以前のそれに8086を含んでるなら矛盾はしない
- 731 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 16:26:45.84 ID:lrg7uRD+0.net]
- 8086でフルに積むメモリの意味が分からん
- 732 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD) mailto:sage [2023/09/27(水) 16:44:44.21 ID:Q9yfznPE0.net]
- この場合の「フル」はメモリ空間いっぱいのことなんじゃないの。
バンク切り換えまで含めたらいくらでも拡張の余地はあるけど malloc でバンクを跨ぐわけにはいかんし。
- 733 名前:デフォルトの名無しさん (ワッチョイ 1e63-CSnM) mailto:sage [2023/09/27(水) 17:00:48.31 ID:lrg7uRD+0.net]
- 8086のアドレスバスは20ビットだから、1MB実装できる
- 734 名前:デフォルトの名無しさん (ワッチョイ 07e5-+HDL) mailto:sage [2023/09/27(水) 18:45:56.76 ID:3YDDpoD+0.net]
- 勉強になります
- 735 名前:デフォルトの名無しさん (ワッチョイ 1a94-oRtz) [2023/09/27(水) 19:57:19.01 ID:3fbQ67ov0.net]
- 勉強と言ってももう40年近く昔の知識だぞ
今どき役に立つことなんかあるか?
|

|