引数はスタックではなくレジスタに実体がある
びっくり!iNoma.icon
異なるABIでも同じ呼出規約を採用していれば、引数の扱いは変わらない
プログラマ目線では、引数はスタックにあるように振る舞う
これは、引数のライフサイクルがスタックフレームと同じ、という意味だろう おそらく他の言語でも似た挙動があると予想される
標準規格でスタックで渡すようにと規定されているわけではありませんし、実際の渡し方も微妙に異なる場合があります。 CPUは内部にレジスタと呼ばれる幾つかの超高速なメモリを持っています。レジスタは数個~数10個程度しかないためアドレスは振られず、マシン後で直接レジスタ番号等を使ってアクセスされます。 例えば、引数リストの先頭から数個はそのようなレジスタを使って実引数が渡され、レジスタでは足りない分がスタックで渡されるような方法が使われる場合もあります。その場合でも、更に他の関数を呼ぶ時にレジスタの値はスタックに積まれ他の関数で破壊されないように退避/回復されます
これ、関数がネストしたら今いる階層の実引数だけがレジスタにあり、中間層の実引数は随時スタックに退避、と読んでいいのかな
現在の階層の実引数はレジスタへ
上の階層の呼び出し時にで渡された引数はスタックにある状況