C++相談室 part152

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/07/12(日) 13:42:20.13ID:TX1mpKr6
https://mevius.5ch.net/test/read.cgi/tech/1589424805/
2020/09/25(金) 03:12:37.08ID:5q2rxyfR
>>622
ものによるんだろうが、たとえば配列へのアクセスがバッファーオーバーフローに
ならないかのチェック程度ならほどんど実行時のペナルティはないというデータはどこかで見たことがあるな。
正しいプログラムなら分岐予測がほぼ成功するから。

まあ結局のところは程度問題というか、許容可能な程度ならチェックしたっていいだろうし、
実際問題として全く異常系がないプログラムというものもそれはそれでありえないわけで。
2020/09/25(金) 05:15:46.56ID:Y7UfbpFk
>>629
よく8086のセグメントレジスタを糞呼ばわりするやついるけど
あれはあれで意外と合理性あったんだよな・・
2020/09/25(金) 06:14:47.70ID:cdg8K9Zm
>>622
ライブラリによってはデバッグ版とリリース版を持ってたりする
チェックを端折ることができるって言うのが売り
2020/09/25(金) 06:35:56.95ID:cdg8K9Zm
>>629
> なんかデタラメがいろいろ混じってるぞ。
お前が言うなよ…

> 0番地にフリーのRAMなどたいていない。
6800はダイレクトアドレッシングモード持ってるから0x0000〜0x00ffはRAM前提
6502も0x0000〜0x00ffがRAMでないと使い物にならないしスタック領域がハード的に決まってるにも関わらず後ろから使う設計だったりする
> じゃあいつSP設定値いつ決まるのって話
開発中にRAMの下限が変わったらSPの初期値の設定変えるだけだろ
2020/09/25(金) 06:40:05.92ID:cdg8K9Zm
>>631
想定している範囲内で使う分には効率いいし優れたアーキテクチャだと思う
想定している範囲がすぐに時代遅れになってしまったけど…
2020/09/25(金) 07:16:04.04ID:+l2B7ows
>>627
スタックポインタというものができた、8008から8080に進化した時の話なのよ

>一つながりのメモリを上と下の両方から使っていったらすばらしい
うん、それだけの話
若い番地にはプログラムを置くのよ、後ろからスタック、そんだけ
2020/09/25(金) 07:46:42.31ID:xGsH9qpm
mallocまで行かなくてもRAMが少ないからこそヒープからの固定長メモリブロックを使って省メモリしてたし、ヒープとスタックは別方向に取ったほうが最大限利用できた。
運が悪いとオーバーラップして誤動作するけど。
637デフォルトの名無しさん
垢版 |
2020/09/25(金) 07:51:02.31ID:UNwnFJoF
キャッシュ効率を上げるためにコーディング上でなにかできることある?
2020/09/25(金) 08:15:54.26ID:xSHyo3nF
あるよ
まずキャッシュ効率というのをどうやって計測しようとしているか書いてみ
639デフォルトの名無しさん
垢版 |
2020/09/25(金) 08:32:54.15ID:UNwnFJoF
プロファイラー
2020/09/25(金) 08:33:00.07ID:WvFHSXSD
>>629
ふふふ 皆その程度のことなどわかった上で
たわむれておるのだがn(ry

>>635
>若い番地にはプログラムを置くのよ、後ろからスタック、
プログラムがROM上なら別段RAMの先頭からスタック、で良いのでは…
プログラムをRAM上に転送してから実行するとしても、プログラムの末尾からスタック、で良いのでは…
ハンドアセンブルするときにプログラム末尾のアドレスが最後まで確定しないというのは却下
(ワークメモリをプログラムの末尾に配置するほうが数が
 プログラムの末尾アドレス確定後に決めなければならない定数が増えて大変なはず…
2020/09/25(金) 09:01:31.03ID:xSHyo3nF
>>639
じゃあ最適化ガイドのドキュメントあるでしょ?
がんばれ
642デフォルトの名無しさん
垢版 |
2020/09/25(金) 09:08:54.15ID:UNwnFJoF
>>641
わからないなら期待もたせるな
2020/09/25(金) 09:09:20.44ID:3+LaQyVV
メモリアクセスが狭い範囲に集中するように工夫する
可能な限りスレッド数を少なくタイムスライスを長くする
2020/09/25(金) 09:30:26.29ID:VqVKl+Zt
>>637
対象CPUのキャッシュアーキテクチャは何?
2020/09/25(金) 09:36:13.59ID:cdg8K9Zm
>>635
> スタックポインタというものができた、8008から8080に進化した時の話なのよ
知ったか乙
PDP-11にすでにスタックポインタはあるぞ
2020/09/25(金) 09:41:32.68ID:3+LaQyVV
80系に採用されたって話だろ
2020/09/25(金) 09:44:46.31ID:3+LaQyVV
てす
2020/09/25(金) 10:19:41.79ID:xSHyo3nF
>>642
ざっくりした内容で1行書き込めば
懇切丁寧に教えてもらえると思った?
2020/09/25(金) 10:35:33.35ID:cdg8K9Zm
>>646
PDP-11の時代からスタックは高位番地から使うようになってる
8080は(他のプロセッサも含めて)それに倣っただけ
2020/09/25(金) 12:11:23.00ID:3+LaQyVV
>>649
何で俺がそんな説明されるのかよくわからん
2020/09/25(金) 12:17:58.23ID:cdg8K9Zm
>>650
>>635の話じゃないと言うならいちいち横から絡んでこないでね、ウザいだけだし
652デフォルトの名無しさん
垢版 |
2020/09/25(金) 12:28:12.75ID:4ovx1Tzj
CSとSSが物理的に分けられるようになって意味が無くなった
2020/09/25(金) 12:32:13.75ID:iQJ3d1Xe
>>633
6502のアーキテクチャぐらい知ってるがな。だからたいていと言ってるだろ。
> SPの初期値の設定変えるだけだろ
当時の開発環境は紙の上とかが普通。ハンドアセンブル上等でみんなOPコード暗記してた。
ROM位置ズレました〜なんて言われたらちゃぶ台返しレベルの仕様変更。
8086のような相対値アドレスで比較的リロケータブルな環境は後になってから。
設定値を変えるだけだろとか簡単に言われても困る。

> PDP-11の時代からスタックは高位番地から使うようになってる
だったら当時はなぜそうなったか説明してくれないとな。
2020/09/25(金) 13:08:52.30ID:3+LaQyVV
>>651
646が絡んだことになってるのか
被害妄想の強い人だな
2020/09/25(金) 13:31:16.91ID:cdg8K9Zm
>>653
> 設定値を変えるだけだろとか簡単に言われても困る。
スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
> だったら当時はなぜそうなったか説明してくれないとな。
それはPDP-11のアーキテクトに聞いてくれ
俺の指摘は8080ガーと言うのが的外れって言う話だから

>>654
いちいち絡んでくるなよ、気持ち悪いわ
2020/09/25(金) 13:43:22.03ID:3+LaQyVV
被害妄想というよりボキャ貧かw

なるほどな、今さらなことをドヤってるのも頭の更新が止まっている症状か
納得
657デフォルトの名無しさん
垢版 |
2020/09/25(金) 14:00:06.69ID:4ovx1Tzj
>頭の更新

ほんそれ
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だと効率が良かった。
2020/09/25(金) 14:14:37.28ID:cdg8K9Zm
具体的に反論できないなら黙ってりゃいいのに…
2020/09/25(金) 14:20:55.55ID:MA61Hr7D
64ビットになったらセグメントなんてどうでもよくなったな
2020/09/25(金) 14:32:23.95ID:3+LaQyVV
対立してないのにどうやって反論するんだよ
それと何がどうだったという証言は論じゃないからな
2020/09/25(金) 14:42:12.89ID:cdg8K9Zm
>>661
お前はどうでもいいから無駄に絡んでくるな

>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
に対する答えが欲しいだけ
2020/09/25(金) 14:50:04.04ID:3+LaQyVV
>>662
おまえさんこそ俺が言ったことに反駁できてないな

喧嘩腰で来たのそっちだぜ
許して欲しいならちゃんとそう言えよ
まあ逃げても追わねえでやるけど
2020/09/25(金) 15:17:28.57ID:cdg8K9Zm
それこそ論点がないのにどう反駁しろと?
バカが横から絡んできて勝手にスッ転びました、どうしましょうか?
⇒ 放置しかないわなw
2020/09/25(金) 15:39:37.04ID:3+LaQyVV
>>664
じゃ被害妄想認めるんだな? ニヤニヤ
2020/09/25(金) 15:46:21.30ID:iQJ3d1Xe
>>655
>SP相対
なんだよこれ。非力なチップでスタックフレームの実装でも始める気か?
8086のようなスタックフレーム考慮した楽ちんアドレッシングとかおまえの指摘は時代錯誤が多い。
当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
結局確定しないから後ろからってなるだけだ。
2020/09/25(金) 16:41:04.34ID:cdg8K9Zm
>>665
また意味不明なことを言い出した
まあ低能にありがちな行動だけどw

>>666
push/popってSP相対だろ
> 当時のデバイスもROMやテープが当たり前だし設定値変えるだけとかほんと簡単に言ってくれる。
どうせ変更するのにSPの初期値を変えるのが面倒とか意味わからん
ちなみに俺は8bit時代からの組込み屋でテープもEP-ROMも使ってたから当時の話とかでごまかそうとしても無駄だよ
> だいたい先頭にスタック置いて、今度はどうやってワークエリアの位置を確定する気だよ。
後ろから取ればいいだけだろ
ただなんとなく気持ち悪いから前からワークエリア、後ろからスタックってなっただけだと思うよ
2020/09/25(金) 16:53:17.35ID:3+LaQyVV
否定しないなあw

スタックへのアクセスはpush/popだけとか
自動変数にポインタ経由でアクセスするのがトリッキーとか
何だろこの人w
2020/09/25(金) 16:54:42.59ID:3+LaQyVV
> EP-ROMも使って【た】

過去形だね
C++でファームウエア書いてないってことか
2020/09/25(金) 16:58:24.91ID:iQJ3d1Xe
>>667
なぜSPは後ろからという議論なんだから結論を先に言えよ。先に言ってりゃおまえとは議論しないんだよ。

> ただなんとなく気持ち悪いから
2020/09/25(金) 17:11:48.04ID:cdg8K9Zm
>>668
> 自動変数にポインタ経由でアクセスするのがトリッキーとか
それSP相対になるだろ
とりあえず
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の答えを考えてからレスしろよ…

>>669
えっ、まだEP-ROM使ってるの?
紫外線イレーザーが現役とかすげーなw
2020/09/25(金) 17:13:00.93ID:cdg8K9Zm
>>670
結論じゃねーよ、俺の勝手な想像だ
日本語も理解できてないアホはこれだから…
2020/09/25(金) 17:20:52.32ID:3+LaQyVV
>>671
ならねえよ
void func(int* p)
{
*p = 1; //代入先が自動変数か否かはわからんだろ
}
おまえさん、左辺値pから右辺値をpopで取り出すとか思ってそうだな
2020/09/25(金) 17:22:59.82ID:3+LaQyVV
EEPROM知らねえらしいな
マジ頭の更新止まってやんのw
2020/09/25(金) 17:33:26.68ID:cdg8K9Zm
>>673
呼ばれた側は自動変数かどうかなんて意識する必要ないだろ…
それ自動変数へのポインタを引数にして呼ぶ側のコード考えたらわかると思うけど

>>674
ん?
EEPROM知らないとかどこから出てきたんだ?
EP-ROMでバカにされて発狂の図?w
2020/09/25(金) 17:36:29.46ID:3+LaQyVV
>>675
自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
重箱の隅ではないごく一般的なケースだぞ

ここC++スレだぜ? this->すげー多用するんだが
UV-EPROMのまま更新が止まった頭じゃ思い至らんかったか
2020/09/25(金) 17:48:59.95ID:cdg8K9Zm
>>676
> 自動変数かどうかわからんものへのアクセスをSP相対にできるのかって話だよ
だから自動変数へのポインタを求めるのは呼び出し側でSP相対で計算してるだろ
呼ばれた側は単なるアドレスになってるから関係ない
C/C++の基礎だぞ、まじでわかってないのか?
EP-ROMとか言う前にちょっとは考えろよw
2020/09/25(金) 18:47:54.21ID:ZULCp3JG
>>667
> 8bit時代からの組込み屋でテープもEP-ROMも使ってた

このスレ凄い人おるんやな
素直に感心したわ
2020/09/25(金) 18:52:40.54ID:3+LaQyVV
>>678
ごめんなホレリスカード使ってたわ
それと2500feetのオープンリールとかね
2020/09/25(金) 18:53:47.19ID:cdg8K9Zm
>>678
別に凄くはないよ
そういう時代に仕事してたってだけの話
もうすぐ定年だけど正直仕事としては当時の方が面白かったな
まあ時代が上り坂だったせいもあるけど
2020/09/25(金) 18:56:12.18ID:3+LaQyVV
>>677
this->がどう翻訳されているのか覗いてみたことがないから
スタックへのアクセスはほとんどがSP相対だなんて大きく出たんだろ

おまえマジC++でROM焼きしてねえだろ
2020/09/25(金) 19:13:00.04ID:cdg8K9Zm
>>681
> this->がどう翻訳されているのか覗いてみたことがないから
C++はスタティックとかヒープとかにインスタンス置けるから一概には言えんけど自動変数としてインスタンスを生成したらthisポインタはSP相対になるだろ
ならない例があるとでも言うのか?

> おまえマジC++でROM焼きしてねえだろ
まあC++のROM焼は確かにあまりないな
ROM焼きするのは8bitはほぼアセンブラだし、16bitでもC言語だったし
ただC言語でもスタック上に生成した構造体へのポインタはC++のthisポインタと同じだしな
アセンブルリスト見たらすぐわかる話
2020/09/25(金) 19:15:18.02ID:ZULCp3JG
>>679
褒めて欲しいん?

>>680
謙遜しなさんな(`・ω・´)ゞ
2020/09/25(金) 19:54:32.95ID:xGsH9qpm
俺も含めてオッサンしかいないスレw
オッサン同士仲良くしようぜ。
2020/09/25(金) 20:41:49.58ID:3+LaQyVV
>>682
C++でROM焼きしてねえんだな?
このスレではゴミだぜ、クズだぜ
そこ弁えろな、ゴミクズ

thisがSPとか寝言ぬかしてんじゃねえ
2020/09/25(金) 20:53:09.26ID:uaSa3tOr
スタックに必要なサイズを求めるのはとても面倒だった。
だから、予め決まった領域を割り当てるのは不可能に近かったので、
データ領域とは逆さまに、データ領域が最後まで使わない部分をスタック
領域とし、暴走しない限りはスタックが足りていると判断する(笑)と言う
当時としては合理的な方法が採用された。
この方式だと、スタックサイズが見積もれなくても、問題が無い。
本等はスタックが足りているかどうかは、暴走したかどうかではなく、
機械語モニタなどで、スタック付近をダンプしてみて、00h以外の値が
ある部分がスタックが使用されている領域とみなすことが出来た。
2020/09/25(金) 20:55:19.51ID:mkPsEV2L
体はオッサン、心は子供
2020/09/25(金) 20:57:43.58ID:uaSa3tOr
>>682
もちろん、その関数の中ではsp相対になる。
しかし、C言語では、ローカル変数のアドレスを他の関数に渡す。
一方、グローバル変数のアドレスも同じ方式で他の関数に渡す。
で、どちらからきたアドレス化を区別する方法が基本的には無い。
区別するためには、far pointer といって、普通のアドレス以外にセグメントアドレス
を合わせた長いポインタを渡す必要があった。
しかし、それは何かと効率が悪かった。
そこで、Windowsは32BIT化したときに、far pointerを使わずに済ますため、
(大体で言えば)セグメントを全て共通のベースアドレスとサイズを持つようにし、
「Full Flat」方式を採用した。
これで、ポインタ渡したり記録したりするための領域が短くて済み、
効率が上がった。
2020/09/25(金) 20:58:24.32ID:cdg8K9Zm
>>685
で、SP相対にならない例はあるんか?
>>679見る限り汎用機のオペレーターさんみたいだからあまり無理すんなw
2020/09/25(金) 21:01:47.89ID:3+LaQyVV
>>689
だからthisな
どっから値もらってきたかは関係ねえの
わかったか? ゴミクズ
2020/09/25(金) 21:14:22.02ID:DCkHs+Bt
>>688
sp 相対アドレッシングって 6809 以外にはなにがあるのですか?
2020/09/25(金) 21:21:28.43ID:uaSa3tOr
>>691
x86系は、[esp+xxx]が使える。
[ebp+xxx]も、ebpを関数の先頭でespを記録するから、同じこと。
2020/09/25(金) 21:43:27.60ID:cdg8K9Zm
>>688
申し訳ないけどfarポインタの話は頓珍漢だしややこしくなるだけだよ
セグメントレジスタはSSとDSだけじゃなくてCSやESもあるし、そもそもローカル変数とグローバル変数を区別するためのもんじゃないし

>>690
>>663w
2020/09/25(金) 21:49:46.68ID:+l2B7ows
けんかをやめて 二人をとめて私のために 争わないで もうこれ以上
2020/09/25(金) 22:03:03.73ID:5mEzuFCz
>>694
お前がスタックポインタか
2020/09/25(金) 22:07:42.71ID:OvccyAEi
排他制御の話じゃないかな
2020/09/25(金) 22:11:37.83ID:GDRWkdI/
>>695
俺がスタックポインタだ
2020/09/25(金) 22:17:10.28ID:iQJ3d1Xe
thisの話は何をモメてるかよくわからないが、単順にブート時のSP初期化値の変更で
後ろのスタックをアクセスするコードを修正する必要があるかないかという話。
彼はSP相対(←この表現がおかしい?)だから変更する必要がないと言ってる。
まぁ、基本手はにはそうだが、処理系によってはバンク切り替えでスタックエリアが裏に回る可能性も否定できない。
そして今時のカーネル開発のようにコンテキスト保持のために同期てんこ盛りになるわけだ。
2020/09/25(金) 22:22:47.78ID:cdg8K9Zm
>>691
6800とかでもTSX命令でSPをインデックスレジスタにコピーして相対アクセスできる
8080ならSPHLでSPをHLレジスタにコピーできる、オフセットの処理は自前でやるしかないけど
まあ6809や8086に比べたらかなり効率悪いコードになるけどね
2020/09/25(金) 22:23:24.07ID:ogXn8IQh
x86のC言語では、スタックに積み込まれた自動変数のデータは、SPが変更されてもスタックフレームを復元すれば、変更前と変わらずアクセスできる。SPの値もプッシュ・ポップできる訳であって。
2020/09/25(金) 22:25:44.11ID:cdg8K9Zm
>>698
> 処理系によってはバンク切り替えでスタックエリアが裏に回る可能性も否定できない。
そんな特殊な例を出されても…
2020/09/25(金) 22:33:13.14ID:iQJ3d1Xe
一般的な日本の8bitPCで64KB空間しかないのにROMだけでもあれこれと数百キロバイト積んでるし、
VRAMもでかい。基本、z80も6502もフラットを要求するCとの相性はよくない。
2020/09/25(金) 22:48:54.96ID:ZULCp3JG
6800てw
ワイが学生時代演習で使ったのが68000だったなぁ
今となっては何一つ覚えてないけど
704デフォルトの名無しさん
垢版 |
2020/09/26(土) 01:53:27.55ID:JrFBwqTU
もはやC++全く関係ない話だな
2020/09/26(土) 06:33:34.63ID:JvTrRG8q
>>693
おまえさんが使う空疎な罵倒語とは違うぞ
なぜゴミクズなのかきちんと説明したうえで言っているからな
2020/09/26(土) 06:40:46.95ID:U+G6yEte
>>705
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の答えはまだかな?

> 許して欲しいならちゃんとそう言えよ
> まあ逃げても追わねえでやるけど
そのまま返してやるからさw
2020/09/26(土) 06:47:39.19ID:JvTrRG8q
>>706
答えはまだかなって、そもそも俺は聞かれてないんだが?
レスの流れをもっぺん追ってみな
2020/09/26(土) 06:49:33.64ID:U+G6yEte
>>707
お前が誰か知らんがなw
関係ないならいちいち絡んでくるなよ、気持ち悪いわ
2020/09/26(土) 06:51:36.58ID:JvTrRG8q
>>708
では「答えはまだかな」は引っ込めるんだな?
しがみついてた梯子を外されて可哀想にw
2020/09/26(土) 06:57:40.31ID:U+G6yEte
>>709
馬鹿なの?
お前に対しては聞かないというだけの話
>>653が早く答えればいいだけ
まあ無理だからゴミクズとか言い出してるんろうけどw
2020/09/26(土) 07:13:53.77ID:JvTrRG8q
>>710
おまえさんがゴミクズなのはC++でROM焼きしてないからだ
それをすり替えようったってそうはさせねえよ
わかったか? ゴミクズ
2020/09/26(土) 07:27:56.00ID:U+G6yEte
何だこいつ?
いきなり絡んできて意味不明なこと言い出すとか通り魔かよw
2020/09/26(土) 07:37:41.03ID:JvTrRG8q
ここはC++スレだ
ゆえにC++でコード書いてないやつは価値ゼロだ

もう一度言う
おまえさんがゴミクズなのはC++でROM焼きしてないからだ
8080であろうが6809であろうが関係ない
C++でコード書いて得た知見を言え
それ以外の戯れ言はいらん
2020/09/26(土) 08:42:15.83ID:U+G6yEte
>>713
ROM焼きしてないだけでC++はガンガン使ってるけど?
thisポインタなんてstructへのポインタを自動生成してるだけ
初期のC++処理系でC言語に変換したコードとか見たことないのか?
2020/09/26(土) 08:47:39.20ID:JvTrRG8q
>>714
おまえさん6800だの8080だの持ち出してドヤってたろ
6800でC++書いてんのかよ? え、おい
2020/09/26(土) 09:07:00.22ID:U+G6yEte
>>715
6800とか8080の話は>>691からの流れな
話の流れも読めないバカは黙ってなよw
2020/09/26(土) 12:45:09.58ID:uIJkShC0
スタック上にある構造体を指すポインタはスタック領域を指すっていう
それだけの話で100レス以上も盛り上がれるなんて楽しそうで羨ましい
2020/09/26(土) 12:57:51.80ID:U+G6yEte
上から目線で頓珍漢な結論を開陳してる君の方が幸せそうだがw
2020/09/26(土) 13:01:37.96ID:JvTrRG8q
>>718
エテ公の自己紹介乙
2020/09/26(土) 13:10:27.66ID:U+G6yEte
話の流れも読めないバカがなんか言ってるなw
惨めにならないんだろうか?
2020/09/26(土) 13:18:24.22ID:JvTrRG8q
上から目線で頓珍漢な結論を開陳
上から目線で頓珍漢な結論を開陳
上から目線で頓珍漢な結論を開陳
2020/09/26(土) 13:25:59.50ID:JvTrRG8q
>>716
633とかの黒歴史はなかったことにしたいんだろw
C++使ったことない環境の話でドヤるなと牽制されて

なあID:cdg8K9Zmよ
2020/09/26(土) 15:07:52.90ID:U+G6yEte
>>722
ん?
633のどこがおかしいの?
結局、
>> 設定値を変えるだけだろとか簡単に言われても困る。
> スタックへのアクセスってよほどトリッキーなことをしない限りSP相対だぞ
> スタック領域変わったからと言ってSPの初期値以外に一体何を書き換えるんだよw
の回答もないんだけど、君が答えてくれるのかな?w
2020/09/26(土) 15:21:46.24ID:RuVJsWZT
当初は技術論をぶつけあってるようで興味深く読ませてもらってた
難しくて理解できないことも多かったけど

いまはもうただの罵倒合戦になっちゃったね残念です
2020/09/26(土) 15:47:25.99ID:ZTwAa6WW
>>723
説明したとおり、昔の処理系は移動した先のスタックエリアがそこに常にあるとは保証されないからその対応は必要。
今はユーザーモードならOSがスレッドコンテキストを保証してるから頭使わないだけ。
2020/09/26(土) 15:57:43.88ID:U+G6yEte
>>725
> 説明したとおり、昔の処理系は移動した先のスタックエリアがそこに常にあるとは保証されないからその対応は必要。
申し訳ないけど全然状況が想像できん、具体例で説明してくれ
2020/09/26(土) 16:18:49.58ID:ZTwAa6WW
スレッドセーフだったAPIがスレッドセーフじゃなくなりました!!
って言われて、はぁ?と言いながらソースを修正する、みたいな。こんな具体例でいいですか?
2020/09/26(土) 16:40:11.75ID:d+bfMgei
ワイはそこまで昔のことは知らんし、組み込み系の話もわからんけど、
MS-DOS (16bit) 時代のプログラミングの知識だと
データの位置はスタックポインタからの相対というだけではなく
セグメントレジスタの内容も加算される。

スタックセグメントレジスタとデータセグメントレジスタが一致するときは
単純なのだが、そうでないときはセグメントの値とセグメント内のオフセットを組にして
ポインタとして扱わなければならない。
(いわゆる far pointer のこと。
Windows SDK のヘッダファイルの中に near と far がマクロ定義されているのはたぶんそのなごり。)

C のプログラムとして書く分にはメモリモデル (セグメントの扱い) を決め打ちして、
コンパイラはそれに従って整合性を取ってくれるから素直な C プログラムなら問題にならないが、
凝ったメモリ管理をしようとするとそう単純にはいかないことはあったかもしれん。
2020/09/26(土) 17:22:32.99ID:U+G6yEte
>>727
ごめん、全然わからん
そもそもスレッドとかがある時代の話なの?

>>728
あなたも書いてる通りfarポインタでも
> コンパイラはそれに従って整合性を取ってくれるから素直な C プログラムなら問題にならない
のが普通
よほどトリッキーなことをすれば駄目なケースがあるのかも知れんが俺には思いつかん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。