探検
C++相談室 part152
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/07/12(日) 13:42:20.13ID:TX1mpKr6620デフォルトの名無しさん
2020/09/24(木) 23:16:12.65ID:lJ1l9qyF バイナリエディタ見てみろよ。アドレス高いほうが下だろ。
スタックはちゃんと下から積んでるんだよ。
スタックはちゃんと下から積んでるんだよ。
621デフォルトの名無しさん
2020/09/24(木) 23:45:08.26ID:jspEV3AF ホンマにprintf()でもやれるんや、
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c906.html
しかし%nはC++11で廃止されたとあるからモダンなC++ではprintf()は安心、
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c906.html
しかし%nはC++11で廃止されたとあるからモダンなC++ではprintf()は安心、
622デフォルトの名無しさん
2020/09/24(木) 23:46:33.93ID:lJ1l9qyF 安全なライブラリ=チェックが多く遅いライブラリ
C使う意味なくね?
C使う意味なくね?
623デフォルトの名無しさん
2020/09/24(木) 23:48:09.41ID:jspEV3AF 訂正orz、
誤: C++11
正: C11
誤: C++11
正: C11
624デフォルトの名無しさん
2020/09/25(金) 00:19:45.11ID:nCkagqzh >>619
それは昔々、CPUが今よりずっと低能力で、malloc()などをする余力もない時代、
メモリー領域を、普通の変数のワークエリアと、call命令での戻り値アドレスの
記憶のためと、レジスタの保存、復帰(push,pop)用のためのエリアを逆方向
から使うことは、画期的なアイデアだったから。
データ領域は、アドレスの小さい方から、大きいほうへ伸ばして使っていくが、
そうやってるさいにも、call,push,pop命令は使いたいから、そのようにする
以外には当時の非力なCPUには非効率すぎて選択肢が無かった。
今なら、リンクリストや高速なmalloc()などを駆使すれば、別の方法も取れるかも
知れない。
それは昔々、CPUが今よりずっと低能力で、malloc()などをする余力もない時代、
メモリー領域を、普通の変数のワークエリアと、call命令での戻り値アドレスの
記憶のためと、レジスタの保存、復帰(push,pop)用のためのエリアを逆方向
から使うことは、画期的なアイデアだったから。
データ領域は、アドレスの小さい方から、大きいほうへ伸ばして使っていくが、
そうやってるさいにも、call,push,pop命令は使いたいから、そのようにする
以外には当時の非力なCPUには非効率すぎて選択肢が無かった。
今なら、リンクリストや高速なmalloc()などを駆使すれば、別の方法も取れるかも
知れない。
625デフォルトの名無しさん
2020/09/25(金) 00:26:39.90ID:nCkagqzh >>624
[捕捉]
今は、マルチスレッドプログラミングをする際、各スレッドに、それぞれ
別のスタック領域を割り当てるが、その領域の容量は固定サイズ。
固定サイズでも何とかなるのは、メインメモリーが非常に大きくなったためで、
大部分は無駄になっていても、なんとかなってしまうから。
たとえば、関数呼び出しの回数と、ローカルスタック変数の容量を
掛け算したような値を見積もってみれば、とても無駄なスタック領域の
割り当てをしているだろうが、メモリーがふんだんに余る位になっているので
それでも特に問題がなくなってしまった。
ところが、かつてはメモリーが足りなくてどうしようもなかった。
しかも、当然当時はシングルスレッドだった。
なので、データ領域は上から、スタック領域は下から伸ばしていけば、
お互いが衝突するまで使える。これは、ギリギリ限界まで無駄なく
メモリーが使えることを意味する。
[捕捉]
今は、マルチスレッドプログラミングをする際、各スレッドに、それぞれ
別のスタック領域を割り当てるが、その領域の容量は固定サイズ。
固定サイズでも何とかなるのは、メインメモリーが非常に大きくなったためで、
大部分は無駄になっていても、なんとかなってしまうから。
たとえば、関数呼び出しの回数と、ローカルスタック変数の容量を
掛け算したような値を見積もってみれば、とても無駄なスタック領域の
割り当てをしているだろうが、メモリーがふんだんに余る位になっているので
それでも特に問題がなくなってしまった。
ところが、かつてはメモリーが足りなくてどうしようもなかった。
しかも、当然当時はシングルスレッドだった。
なので、データ領域は上から、スタック領域は下から伸ばしていけば、
お互いが衝突するまで使える。これは、ギリギリ限界まで無駄なく
メモリーが使えることを意味する。
626デフォルトの名無しさん
2020/09/25(金) 00:29:23.03ID:iQJ3d1Xe なんかデタラメがいろいろ混じってるぞ。
627デフォルトの名無しさん
2020/09/25(金) 00:30:59.73ID:7nm9kuAr >>624
どこらへんが画期的で効率的なのかkwsk、
普通の変数のワークエリアと逆方向からスタックを伸ばしたところで
使えるメモリが増えるわけでなし…
(スレッドが2本以上あればスタック領域は結局スレッド毎に固定サイズで割り当てるしかない
百歩譲って一つながりのメモリを上と下の両方から使っていったらすばらしいと思えたとしても、
なんでスタックを0番地から上に伸ばしてsbrkが最大アドレスから下に伸びる設計にしなかったのかの
説明にならない
どこらへんが画期的で効率的なのかkwsk、
普通の変数のワークエリアと逆方向からスタックを伸ばしたところで
使えるメモリが増えるわけでなし…
(スレッドが2本以上あればスタック領域は結局スレッド毎に固定サイズで割り当てるしかない
百歩譲って一つながりのメモリを上と下の両方から使っていったらすばらしいと思えたとしても、
なんでスタックを0番地から上に伸ばしてsbrkが最大アドレスから下に伸びる設計にしなかったのかの
説明にならない
628デフォルトの名無しさん
2020/09/25(金) 00:34:29.83ID:nCkagqzh >>625
[もっと捕捉]
今は、MMUを使っており、実際に使ってない仮想メモリー空間には、物理メモリー
を割り当てない。だから、使うまでは物理メモリーは無駄にはならない。
もう一つは、(仮想)アドレス空間自体が飛躍的に大きく取れるようになったことで、
搭載している物理メモリー以上に大きなアドレス空間が使えて、各スレッド
のスタック用に大きめにアドレス空間を確保(commit)しておけるように
なった。
32BIT時代ですら、4GBの仮想アドレス空間が使えたから、アドレス空間自体の
不足は余りおきなくなった。積んでいる物理メモリーよりも大きな空の領域を
各スレッドのスタックに割り当てても、特に問題が無い。
今や64BIT時代。同時に実行するスレッドの個数も増えつつあるが、各スタック
領域の仮想アドレス空間上のサイズを大きくとってもどうってことは無い時代になった。
しかし、かつてはそうではなく、スタックは下から上に伸ばして行き、データ領域
と衝突するまで使うのが良い方法だった。
[もっと捕捉]
今は、MMUを使っており、実際に使ってない仮想メモリー空間には、物理メモリー
を割り当てない。だから、使うまでは物理メモリーは無駄にはならない。
もう一つは、(仮想)アドレス空間自体が飛躍的に大きく取れるようになったことで、
搭載している物理メモリー以上に大きなアドレス空間が使えて、各スレッド
のスタック用に大きめにアドレス空間を確保(commit)しておけるように
なった。
32BIT時代ですら、4GBの仮想アドレス空間が使えたから、アドレス空間自体の
不足は余りおきなくなった。積んでいる物理メモリーよりも大きな空の領域を
各スレッドのスタックに割り当てても、特に問題が無い。
今や64BIT時代。同時に実行するスレッドの個数も増えつつあるが、各スタック
領域の仮想アドレス空間上のサイズを大きくとってもどうってことは無い時代になった。
しかし、かつてはそうではなく、スタックは下から上に伸ばして行き、データ領域
と衝突するまで使うのが良い方法だった。
629デフォルトの名無しさん
2020/09/25(金) 00:47:42.60ID:iQJ3d1Xe >>627
picの変態仕様見れば分かる。汎用機もそうだけどスタック制限あるアーキテクチャが普通だった時代。
しかも0番地から伸ばすとかCPUの仕組みすら知らんレベルだな。割り込みベクタがあったり、プログラムのROMがあったり、
0番地にフリーのRAMなどたいていない。つまり空いてるRAMの下限は開発が終了するまで確定しないこともしばしば。
じゃあいつSP設定値いつ決まるのって話。決まらないんだから一番うしろにして前に進めるのが頭使わずに済む。
ちなみに8086はスタックセグメントあるから。便利だろw
picの変態仕様見れば分かる。汎用機もそうだけどスタック制限あるアーキテクチャが普通だった時代。
しかも0番地から伸ばすとかCPUの仕組みすら知らんレベルだな。割り込みベクタがあったり、プログラムのROMがあったり、
0番地にフリーのRAMなどたいていない。つまり空いてるRAMの下限は開発が終了するまで確定しないこともしばしば。
じゃあいつSP設定値いつ決まるのって話。決まらないんだから一番うしろにして前に進めるのが頭使わずに済む。
ちなみに8086はスタックセグメントあるから。便利だろw
630はちみつ餃子 ◆8X2XSCHEME
2020/09/25(金) 03:12:37.08ID:5q2rxyfR >>622
ものによるんだろうが、たとえば配列へのアクセスがバッファーオーバーフローに
ならないかのチェック程度ならほどんど実行時のペナルティはないというデータはどこかで見たことがあるな。
正しいプログラムなら分岐予測がほぼ成功するから。
まあ結局のところは程度問題というか、許容可能な程度ならチェックしたっていいだろうし、
実際問題として全く異常系がないプログラムというものもそれはそれでありえないわけで。
ものによるんだろうが、たとえば配列へのアクセスがバッファーオーバーフローに
ならないかのチェック程度ならほどんど実行時のペナルティはないというデータはどこかで見たことがあるな。
正しいプログラムなら分岐予測がほぼ成功するから。
まあ結局のところは程度問題というか、許容可能な程度ならチェックしたっていいだろうし、
実際問題として全く異常系がないプログラムというものもそれはそれでありえないわけで。
631デフォルトの名無しさん
2020/09/25(金) 05:15:46.56ID:Y7UfbpFk632デフォルトの名無しさん
2020/09/25(金) 06:14:47.70ID:cdg8K9Zm633デフォルトの名無しさん
2020/09/25(金) 06:35:56.95ID:cdg8K9Zm >>629
> なんかデタラメがいろいろ混じってるぞ。
お前が言うなよ…
> 0番地にフリーのRAMなどたいていない。
6800はダイレクトアドレッシングモード持ってるから0x0000〜0x00ffはRAM前提
6502も0x0000〜0x00ffがRAMでないと使い物にならないしスタック領域がハード的に決まってるにも関わらず後ろから使う設計だったりする
> じゃあいつSP設定値いつ決まるのって話
開発中にRAMの下限が変わったらSPの初期値の設定変えるだけだろ
> なんかデタラメがいろいろ混じってるぞ。
お前が言うなよ…
> 0番地にフリーのRAMなどたいていない。
6800はダイレクトアドレッシングモード持ってるから0x0000〜0x00ffはRAM前提
6502も0x0000〜0x00ffがRAMでないと使い物にならないしスタック領域がハード的に決まってるにも関わらず後ろから使う設計だったりする
> じゃあいつSP設定値いつ決まるのって話
開発中にRAMの下限が変わったらSPの初期値の設定変えるだけだろ
634デフォルトの名無しさん
2020/09/25(金) 06:40:05.92ID:cdg8K9Zm635デフォルトの名無しさん
2020/09/25(金) 07:16:04.04ID:+l2B7ows >>627
スタックポインタというものができた、8008から8080に進化した時の話なのよ
>一つながりのメモリを上と下の両方から使っていったらすばらしい
うん、それだけの話
若い番地にはプログラムを置くのよ、後ろからスタック、そんだけ
スタックポインタというものができた、8008から8080に進化した時の話なのよ
>一つながりのメモリを上と下の両方から使っていったらすばらしい
うん、それだけの話
若い番地にはプログラムを置くのよ、後ろからスタック、そんだけ
636デフォルトの名無しさん
2020/09/25(金) 07:46:42.31ID:xGsH9qpm mallocまで行かなくてもRAMが少ないからこそヒープからの固定長メモリブロックを使って省メモリしてたし、ヒープとスタックは別方向に取ったほうが最大限利用できた。
運が悪いとオーバーラップして誤動作するけど。
運が悪いとオーバーラップして誤動作するけど。
637デフォルトの名無しさん
2020/09/25(金) 07:51:02.31ID:UNwnFJoF キャッシュ効率を上げるためにコーディング上でなにかできることある?
638デフォルトの名無しさん
2020/09/25(金) 08:15:54.26ID:xSHyo3nF あるよ
まずキャッシュ効率というのをどうやって計測しようとしているか書いてみ
まずキャッシュ効率というのをどうやって計測しようとしているか書いてみ
639デフォルトの名無しさん
2020/09/25(金) 08:32:54.15ID:UNwnFJoF プロファイラー
640デフォルトの名無しさん
2020/09/25(金) 08:33:00.07ID:WvFHSXSD641デフォルトの名無しさん
2020/09/25(金) 09:01:31.03ID:xSHyo3nF642デフォルトの名無しさん
2020/09/25(金) 09:08:54.15ID:UNwnFJoF >>641
わからないなら期待もたせるな
わからないなら期待もたせるな
643デフォルトの名無しさん
2020/09/25(金) 09:09:20.44ID:3+LaQyVV メモリアクセスが狭い範囲に集中するように工夫する
可能な限りスレッド数を少なくタイムスライスを長くする
可能な限りスレッド数を少なくタイムスライスを長くする
644デフォルトの名無しさん
2020/09/25(金) 09:30:26.29ID:VqVKl+Zt >>637
対象CPUのキャッシュアーキテクチャは何?
対象CPUのキャッシュアーキテクチャは何?
645デフォルトの名無しさん
2020/09/25(金) 09:36:13.59ID:cdg8K9Zm646デフォルトの名無しさん
2020/09/25(金) 09:41:32.68ID:3+LaQyVV 80系に採用されたって話だろ
647デフォルトの名無しさん
2020/09/25(金) 09:44:46.31ID:3+LaQyVV てす
648デフォルトの名無しさん
2020/09/25(金) 10:19:41.79ID:xSHyo3nF649デフォルトの名無しさん
2020/09/25(金) 10:35:33.35ID:cdg8K9Zm650デフォルトの名無しさん
2020/09/25(金) 12:11:23.00ID:3+LaQyVV >>649
何で俺がそんな説明されるのかよくわからん
何で俺がそんな説明されるのかよくわからん
651デフォルトの名無しさん
2020/09/25(金) 12:17:58.23ID:cdg8K9Zm652デフォルトの名無しさん
2020/09/25(金) 12:28:12.75ID:4ovx1Tzj CSとSSが物理的に分けられるようになって意味が無くなった
653デフォルトの名無しさん
2020/09/25(金) 12:32:13.75ID:iQJ3d1Xe >>633
6502のアーキテクチャぐらい知ってるがな。だからたいていと言ってるだろ。
> SPの初期値の設定変えるだけだろ
当時の開発環境は紙の上とかが普通。ハンドアセンブル上等でみんなOPコード暗記してた。
ROM位置ズレました〜なんて言われたらちゃぶ台返しレベルの仕様変更。
8086のような相対値アドレスで比較的リロケータブルな環境は後になってから。
設定値を変えるだけだろとか簡単に言われても困る。
> PDP-11の時代からスタックは高位番地から使うようになってる
だったら当時はなぜそうなったか説明してくれないとな。
6502のアーキテクチャぐらい知ってるがな。だからたいていと言ってるだろ。
> SPの初期値の設定変えるだけだろ
当時の開発環境は紙の上とかが普通。ハンドアセンブル上等でみんなOPコード暗記してた。
ROM位置ズレました〜なんて言われたらちゃぶ台返しレベルの仕様変更。
8086のような相対値アドレスで比較的リロケータブルな環境は後になってから。
設定値を変えるだけだろとか簡単に言われても困る。
> PDP-11の時代からスタックは高位番地から使うようになってる
だったら当時はなぜそうなったか説明してくれないとな。
654デフォルトの名無しさん
2020/09/25(金) 13:08:52.30ID:3+LaQyVV655デフォルトの名無しさん
2020/09/25(金) 13:31:16.91ID:cdg8K9Zm656デフォルトの名無しさん
2020/09/25(金) 13:43:22.03ID:3+LaQyVV 被害妄想というよりボキャ貧かw
なるほどな、今さらなことをドヤってるのも頭の更新が止まっている症状か
納得
なるほどな、今さらなことをドヤってるのも頭の更新が止まっている症状か
納得
657デフォルトの名無しさん
2020/09/25(金) 14:00:06.69ID:4ovx1Tzj >頭の更新
ほんそれ
ほんそれ
658デフォルトの名無しさん
2020/09/25(金) 14:09:34.94ID:u87G89iw >>652
でも、アセンブラならcall,push,pop,[ebp+xxx],[esp+xxx]はss:をしていなくても
勝手に stack segment相対になるから良いが、Cの引数にバッファのアドレスを
渡すような場合、ds:なのか、ss:なのかが分からないから、farアドレスにする
しかなくなってしまう。なので、ss=dsの状態にした方がCだと効率が良かった。
でも、アセンブラならcall,push,pop,[ebp+xxx],[esp+xxx]はss:をしていなくても
勝手に stack segment相対になるから良いが、Cの引数にバッファのアドレスを
渡すような場合、ds:なのか、ss:なのかが分からないから、farアドレスにする
しかなくなってしまう。なので、ss=dsの状態にした方がCだと効率が良かった。
659デフォルトの名無しさん
2020/09/25(金) 14:14:37.28ID:cdg8K9Zm 具体的に反論できないなら黙ってりゃいいのに…
660デフォルトの名無しさん
2020/09/25(金) 14:20:55.55ID:MA61Hr7D 64ビットになったらセグメントなんてどうでもよくなったな
661デフォルトの名無しさん
2020/09/25(金) 14:32:23.95ID:3+LaQyVV 対立してないのにどうやって反論するんだよ
それと何がどうだったという証言は論じゃないからな
それと何がどうだったという証言は論じゃないからな
662デフォルトの名無しさん
2020/09/25(金) 14:42:12.89ID:cdg8K9Zm >>661
お前はどうでもいいから無駄に絡んでくるな
>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
に対する答えが欲しいだけ
お前はどうでもいいから無駄に絡んでくるな
>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
に対する答えが欲しいだけ
663デフォルトの名無しさん
2020/09/25(金) 14:50:04.04ID:3+LaQyVV664デフォルトの名無しさん
2020/09/25(金) 15:17:28.57ID:cdg8K9Zm それこそ論点がないのにどう反駁しろと?
バカが横から絡んできて勝手にスッ転びました、どうしましょうか?
⇒ 放置しかないわなw
バカが横から絡んできて勝手にスッ転びました、どうしましょうか?
⇒ 放置しかないわなw
665デフォルトの名無しさん
2020/09/25(金) 15:39:37.04ID:3+LaQyVV >>664
じゃ被害妄想認めるんだな? ニヤニヤ
じゃ被害妄想認めるんだな? ニヤニヤ
666デフォルトの名無しさん
2020/09/25(金) 15:46:21.30ID:iQJ3d1Xe >>655
>SP相対
なんだよこれ。非力なチップでスタックフレームの実装でも始める気か?
8086のようなスタックフレーム考慮した楽ちんアドレッシングとかおまえの指摘は時代錯誤が多い。
当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
結局確定しないから後ろからってなるだけだ。
>SP相対
なんだよこれ。非力なチップでスタックフレームの実装でも始める気か?
8086のようなスタックフレーム考慮した楽ちんアドレッシングとかおまえの指摘は時代錯誤が多い。
当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
結局確定しないから後ろからってなるだけだ。
667デフォルトの名無しさん
2020/09/25(金) 16:41:04.34ID:cdg8K9Zm >>665
また意味不明なことを言い出した
まあ低能にありがちな行動だけどw
>>666
push/popってSP相対だろ
> 当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
どうせ変更するのにSPの初期値を変えるのが面倒とか意味わからん
ちなみに俺は8bit時代からの組込み屋でテープもEP-ROMも使ってたから当時の話とかでごまかそうとしても無駄だよ
> だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
後ろから取ればいいだけだろ
ただなんとなく気持ち悪いから前からワークエリア、後ろからスタックってなっただけだと思うよ
また意味不明なことを言い出した
まあ低能にありがちな行動だけどw
>>666
push/popってSP相対だろ
> 当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
どうせ変更するのにSPの初期値を変えるのが面倒とか意味わからん
ちなみに俺は8bit時代からの組込み屋でテープもEP-ROMも使ってたから当時の話とかでごまかそうとしても無駄だよ
> だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
後ろから取ればいいだけだろ
ただなんとなく気持ち悪いから前からワークエリア、後ろからスタックってなっただけだと思うよ
668デフォルトの名無しさん
2020/09/25(金) 16:53:17.35ID:3+LaQyVV 否定しないなあw
スタックへのアクセスはpush/popだけとか
自動変数にポインタ経由でアクセスするのがトリッキーとか
何だろこの人w
スタックへのアクセスはpush/popだけとか
自動変数にポインタ経由でアクセスするのがトリッキーとか
何だろこの人w
669デフォルトの名無しさん
2020/09/25(金) 16:54:42.59ID:3+LaQyVV > EP-ROMも使って【た】
過去形だね
C++でファームウエア書いてないってことか
過去形だね
C++でファームウエア書いてないってことか
670デフォルトの名無しさん
2020/09/25(金) 16:58:24.91ID:iQJ3d1Xe671デフォルトの名無しさん
2020/09/25(金) 17:11:48.04ID:cdg8K9Zm672デフォルトの名無しさん
2020/09/25(金) 17:13:00.93ID:cdg8K9Zm673デフォルトの名無しさん
2020/09/25(金) 17:20:52.32ID:3+LaQyVV674デフォルトの名無しさん
2020/09/25(金) 17:22:59.82ID:3+LaQyVV EEPROM知らねえらしいな
マジ頭の更新止まってやんのw
マジ頭の更新止まってやんのw
675デフォルトの名無しさん
2020/09/25(金) 17:33:26.68ID:cdg8K9Zm676デフォルトの名無しさん
2020/09/25(金) 17:36:29.46ID:3+LaQyVV >>675
自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
重箱の隅ではないごく一般的なケースだぞ
ここC++スレだぜ? this->すげー多用するんだが
UV-EPROMのまま更新が止まった頭じゃ思い至らんかったか
自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
重箱の隅ではないごく一般的なケースだぞ
ここC++スレだぜ? this->すげー多用するんだが
UV-EPROMのまま更新が止まった頭じゃ思い至らんかったか
677デフォルトの名無しさん
2020/09/25(金) 17:48:59.95ID:cdg8K9Zm >>676
> 自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
だから自動変数へのポインタを求めるのは呼び出し側でSP相対で計算してるだろ
呼ばれた側は単なるアドレスになってるから関係ない
C/C++の基礎だぞ、まじでわかってないのか?
EP-ROMとか言う前にちょっとは考えろよw
> 自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
だから自動変数へのポインタを求めるのは呼び出し側でSP相対で計算してるだろ
呼ばれた側は単なるアドレスになってるから関係ない
C/C++の基礎だぞ、まじでわかってないのか?
EP-ROMとか言う前にちょっとは考えろよw
678デフォルトの名無しさん
2020/09/25(金) 18:47:54.21ID:ZULCp3JG679デフォルトの名無しさん
2020/09/25(金) 18:52:40.54ID:3+LaQyVV680デフォルトの名無しさん
2020/09/25(金) 18:53:47.19ID:cdg8K9Zm681デフォルトの名無しさん
2020/09/25(金) 18:56:12.18ID:3+LaQyVV682デフォルトの名無しさん
2020/09/25(金) 19:13:00.04ID:cdg8K9Zm >>681
> this->がどう翻訳されているのか覗いてみたことがないから
C++はスタティックとかヒープとかにインスタンス置けるから一概には言えんけど自動変数としてインスタンスを生成したらthisポインタはSP相対になるだろ
ならない例があるとでも言うのか?
> おまえマジC++でROM焼きしてねえだろ
まあC++のROM焼は確かにあまりないな
ROM焼きするのは8bitはほぼアセンブラだし、16bitでもC言語だったし
ただC言語でもスタック上に生成した構造体へのポインタはC++のthisポインタと同じだしな
アセンブルリスト見たらすぐわかる話
> this->がどう翻訳されているのか覗いてみたことがないから
C++はスタティックとかヒープとかにインスタンス置けるから一概には言えんけど自動変数としてインスタンスを生成したらthisポインタはSP相対になるだろ
ならない例があるとでも言うのか?
> おまえマジC++でROM焼きしてねえだろ
まあC++のROM焼は確かにあまりないな
ROM焼きするのは8bitはほぼアセンブラだし、16bitでもC言語だったし
ただC言語でもスタック上に生成した構造体へのポインタはC++のthisポインタと同じだしな
アセンブルリスト見たらすぐわかる話
683デフォルトの名無しさん
2020/09/25(金) 19:15:18.02ID:ZULCp3JG684デフォルトの名無しさん
2020/09/25(金) 19:54:32.95ID:xGsH9qpm 俺も含めてオッサンしかいないスレw
オッサン同士仲良くしようぜ。
オッサン同士仲良くしようぜ。
685デフォルトの名無しさん
2020/09/25(金) 20:41:49.58ID:3+LaQyVV686デフォルトの名無しさん
2020/09/25(金) 20:53:09.26ID:uaSa3tOr スタックに必要なサイズを求めるのはとても面倒だった。
だから、予め決まった領域を割り当てるのは不可能に近かったので、
データ領域とは逆さまに、データ領域が最後まで使わない部分をスタック
領域とし、暴走しない限りはスタックが足りていると判断する(笑)と言う
当時としては合理的な方法が採用された。
この方式だと、スタックサイズが見積もれなくても、問題が無い。
本等はスタックが足りているかどうかは、暴走したかどうかではなく、
機械語モニタなどで、スタック付近をダンプしてみて、00h以外の値が
ある部分がスタックが使用されている領域とみなすことが出来た。
だから、予め決まった領域を割り当てるのは不可能に近かったので、
データ領域とは逆さまに、データ領域が最後まで使わない部分をスタック
領域とし、暴走しない限りはスタックが足りていると判断する(笑)と言う
当時としては合理的な方法が採用された。
この方式だと、スタックサイズが見積もれなくても、問題が無い。
本等はスタックが足りているかどうかは、暴走したかどうかではなく、
機械語モニタなどで、スタック付近をダンプしてみて、00h以外の値が
ある部分がスタックが使用されている領域とみなすことが出来た。
687デフォルトの名無しさん
2020/09/25(金) 20:55:19.51ID:mkPsEV2L 体はオッサン、心は子供
688デフォルトの名無しさん
2020/09/25(金) 20:57:43.58ID:uaSa3tOr >>682
もちろん、その関数の中ではsp相対になる。
しかし、C言語では、ローカル変数のアドレスを他の関数に渡す。
一方、グローバル変数のアドレスも同じ方式で他の関数に渡す。
で、どちらからきたアドレス化を区別する方法が基本的には無い。
区別するためには、far pointer といって、普通のアドレス以外にセグメントアドレス
を合わせた長いポインタを渡す必要があった。
しかし、それは何かと効率が悪かった。
そこで、Windowsは32BIT化したときに、far pointerを使わずに済ますため、
(大体で言えば)セグメントを全て共通のベースアドレスとサイズを持つようにし、
「Full Flat」方式を採用した。
これで、ポインタ渡したり記録したりするための領域が短くて済み、
効率が上がった。
もちろん、その関数の中ではsp相対になる。
しかし、C言語では、ローカル変数のアドレスを他の関数に渡す。
一方、グローバル変数のアドレスも同じ方式で他の関数に渡す。
で、どちらからきたアドレス化を区別する方法が基本的には無い。
区別するためには、far pointer といって、普通のアドレス以外にセグメントアドレス
を合わせた長いポインタを渡す必要があった。
しかし、それは何かと効率が悪かった。
そこで、Windowsは32BIT化したときに、far pointerを使わずに済ますため、
(大体で言えば)セグメントを全て共通のベースアドレスとサイズを持つようにし、
「Full Flat」方式を採用した。
これで、ポインタ渡したり記録したりするための領域が短くて済み、
効率が上がった。
689デフォルトの名無しさん
2020/09/25(金) 20:58:24.32ID:cdg8K9Zm690デフォルトの名無しさん
2020/09/25(金) 21:01:47.89ID:3+LaQyVV >>688
sp 相対アドレッシングって 6809 以外にはなにがあるのですか?
sp 相対アドレッシングって 6809 以外にはなにがあるのですか?
692デフォルトの名無しさん
2020/09/25(金) 21:21:28.43ID:uaSa3tOr693デフォルトの名無しさん
2020/09/25(金) 21:43:27.60ID:cdg8K9Zm694デフォルトの名無しさん
2020/09/25(金) 21:49:46.68ID:+l2B7ows けんかをやめて 二人をとめて私のために 争わないで もうこれ以上
695デフォルトの名無しさん
2020/09/25(金) 22:03:03.73ID:5mEzuFCz >>694
お前がスタックポインタか
お前がスタックポインタか
696デフォルトの名無しさん
2020/09/25(金) 22:07:42.71ID:OvccyAEi 排他制御の話じゃないかな
697デフォルトの名無しさん
2020/09/25(金) 22:11:37.83ID:GDRWkdI/ >>695
俺がスタックポインタだ
俺がスタックポインタだ
698デフォルトの名無しさん
2020/09/25(金) 22:17:10.28ID:iQJ3d1Xe thisの話は何をモメてるかよくわからないが、単順にブート時のSP初期化値の変更で
後ろのスタックをアクセスするコードを修正する必要があるかないかという話。
彼はSP相対(←この表現がおかしい?)だから変更する必要がないと言ってる。
まぁ、基本手はにはそうだが、処理系によってはバンク切り替えでスタックエリアが裏に回る可能性も否定できない。
そして今時のカーネル開発のようにコンテキスト保持のために同期てんこ盛りになるわけだ。
後ろのスタックをアクセスするコードを修正する必要があるかないかという話。
彼はSP相対(←この表現がおかしい?)だから変更する必要がないと言ってる。
まぁ、基本手はにはそうだが、処理系によってはバンク切り替えでスタックエリアが裏に回る可能性も否定できない。
そして今時のカーネル開発のようにコンテキスト保持のために同期てんこ盛りになるわけだ。
699デフォルトの名無しさん
2020/09/25(金) 22:22:47.78ID:cdg8K9Zm >>691
6800とかでもTSX命令でSPをインデックスレジスタにコピーして相対アクセスできる
8080ならSPHLでSPをHLレジスタにコピーできる、オフセットの処理は自前でやるしかないけど
まあ6809や8086に比べたらかなり効率悪いコードになるけどね
6800とかでもTSX命令でSPをインデックスレジスタにコピーして相対アクセスできる
8080ならSPHLでSPをHLレジスタにコピーできる、オフセットの処理は自前でやるしかないけど
まあ6809や8086に比べたらかなり効率悪いコードになるけどね
700蟻人間 ◆T6xkBnTXz7B0
2020/09/25(金) 22:23:24.07ID:ogXn8IQh x86のC言語では、スタックに積み込まれた自動変数のデータは、SPが変更されてもスタックフレームを復元すれば、変更前と変わらずアクセスできる。SPの値もプッシュ・ポップできる訳であって。
701デフォルトの名無しさん
2020/09/25(金) 22:25:44.11ID:cdg8K9Zm702デフォルトの名無しさん
2020/09/25(金) 22:33:13.14ID:iQJ3d1Xe 一般的な日本の8bitPCで64KB空間しかないのにROMだけでもあれこれと数百キロバイト積んでるし、
VRAMもでかい。基本、z80も6502もフラットを要求するCとの相性はよくない。
VRAMもでかい。基本、z80も6502もフラットを要求するCとの相性はよくない。
703デフォルトの名無しさん
2020/09/25(金) 22:48:54.96ID:ZULCp3JG 6800てw
ワイが学生時代演習で使ったのが68000だったなぁ
今となっては何一つ覚えてないけど
ワイが学生時代演習で使ったのが68000だったなぁ
今となっては何一つ覚えてないけど
704デフォルトの名無しさん
2020/09/26(土) 01:53:27.55ID:JrFBwqTU もはやC++全く関係ない話だな
705デフォルトの名無しさん
2020/09/26(土) 06:33:34.63ID:JvTrRG8q706デフォルトの名無しさん
2020/09/26(土) 06:40:46.95ID:U+G6yEte >>705
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の答えはまだかな?
> 許して欲しいならちゃんとそう言えよ
> まあ逃げても追わねえでやるけど
そのまま返してやるからさw
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の答えはまだかな?
> 許して欲しいならちゃんとそう言えよ
> まあ逃げても追わねえでやるけど
そのまま返してやるからさw
707デフォルトの名無しさん
2020/09/26(土) 06:47:39.19ID:JvTrRG8q708デフォルトの名無しさん
2020/09/26(土) 06:49:33.64ID:U+G6yEte709デフォルトの名無しさん
2020/09/26(土) 06:51:36.58ID:JvTrRG8q710デフォルトの名無しさん
2020/09/26(土) 06:57:40.31ID:U+G6yEte711デフォルトの名無しさん
2020/09/26(土) 07:13:53.77ID:JvTrRG8q712デフォルトの名無しさん
2020/09/26(土) 07:27:56.00ID:U+G6yEte 何だこいつ?
いきなり絡んできて意味不明なこと言い出すとか通り魔かよw
いきなり絡んできて意味不明なこと言い出すとか通り魔かよw
713デフォルトの名無しさん
2020/09/26(土) 07:37:41.03ID:JvTrRG8q ここはC++スレだ
ゆえにC++でコード書いてないやつは価値ゼロだ
もう一度言う
おまえさんがゴミクズなのはC++でROM焼きしてないからだ
8080であろうが6809であろうが関係ない
C++でコード書いて得た知見を言え
それ以外の戯れ言はいらん
ゆえにC++でコード書いてないやつは価値ゼロだ
もう一度言う
おまえさんがゴミクズなのはC++でROM焼きしてないからだ
8080であろうが6809であろうが関係ない
C++でコード書いて得た知見を言え
それ以外の戯れ言はいらん
714デフォルトの名無しさん
2020/09/26(土) 08:42:15.83ID:U+G6yEte >>713
ROM焼きしてないだけでC++はガンガン使ってるけど?
thisポインタなんてstructへのポインタを自動生成してるだけ
初期のC++処理系でC言語に変換したコードとか見たことないのか?
ROM焼きしてないだけでC++はガンガン使ってるけど?
thisポインタなんてstructへのポインタを自動生成してるだけ
初期のC++処理系でC言語に変換したコードとか見たことないのか?
715デフォルトの名無しさん
2020/09/26(土) 08:47:39.20ID:JvTrRG8q716デフォルトの名無しさん
2020/09/26(土) 09:07:00.22ID:U+G6yEte717デフォルトの名無しさん
2020/09/26(土) 12:45:09.58ID:uIJkShC0 スタック上にある構造体を指すポインタはスタック領域を指すっていう
それだけの話で100レス以上も盛り上がれるなんて楽しそうで羨ましい
それだけの話で100レス以上も盛り上がれるなんて楽しそうで羨ましい
718デフォルトの名無しさん
2020/09/26(土) 12:57:51.80ID:U+G6yEte 上から目線で頓珍漢な結論を開陳してる君の方が幸せそうだがw
719デフォルトの名無しさん
2020/09/26(土) 13:01:37.96ID:JvTrRG8q >>718
エテ公の自己紹介乙
エテ公の自己紹介乙
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化へ 過去10年間に使用のメールアドレスや電話番号等も★2 [Hitzeschleier★]
- 立憲・小宮山議員、「牛乳=白い水」投稿を削除 批判殺到で「大変失礼申し上げました」 [少考さん★]
- 【中国外務省】日本への渡航自粛を再度呼びかけ 今度は「地震発生」を理由に [ぐれ★]
- 内閣支持、微減59.9% 5割超が補正予算評価 時事通信世論調査 [どどん★]
- 日本語が話せない「外国籍」の子が急増中、授業がストップ、教室から脱走も…先生にも大きな負担「日本語支援」追いつかず★3 [七波羅探題★]
- 【芸能】デパートで見つけたランドセルが衝撃価格! つまみ枝豆「どこかで規制しないと」に共感の声殺到 「全て同感」「高すぎます」★2 [冬月記者★]
- 【悲報】ガイナックス破産、思ったよりヤバそう…ジャップ文化を築いた原画やアニメ資料が海外に散逸へwwwwwwwwwwwwwwwwwwww [802034645]
- 日清オイリオ「オリーブオイルの高騰が落ち着いたのにお前らが買わない!」 [592058334]
- 関西住み26歳ニューハーフです
- 平野雨龍氏が出馬表明「香港守れなかった悔しさ、日本で繰り返したくない」 ネトウヨ歓喜 [237216734]
- (´;ω;`)え〜んえ〜ん
- 【高市遺産】 ユネスコさん。日本の「匠の技」「屋台」「和紙」などを無形文化遺産に登録 🎉🎊 [485983549]
