C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ローカル変数と自動変数


(過去ログ 144 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■84231 / inTopicNo.1)  ローカル変数と自動変数
  
□投稿者/ 古き良き (1回)-(2017/06/01(Thu) 21:27:36)

分類:[.NET 全般] 


関数の引数はローカル変数と自動変数と呼び、スタックで保存するという記憶がありますが。

そうであれば、アドレスの取得は無意味でしょうかどうか。
簡単な説明頂ければ幸いです。

引用返信 編集キー/
■84232 / inTopicNo.2)  Re[1]: ローカル変数と自動変数
□投稿者/ Azulean (826回)-(2017/06/01(Thu) 22:07:45)
2017/06/01(Thu) 22:48:37 編集(投稿者)

No84231 (古き良き さん) に返信

だいぶ漠然とした質問ですが、どこかの課題か何かでしょうか。
それとも、特定の言語・実行環境に絞ったディープな話をしたい(知的好奇心からのもの)ということでしょうか。


> 関数の引数はローカル変数と自動変数と呼び、スタックで保存するという記憶がありますが。
> そうであれば、アドレスの取得は無意味でしょうかどうか。

(分類が .NET 全般のようなので)
.NET で扱われるオブジェクトの多くは、GC により移動されうるとされているので、アドレスを意識する場面がないという状況にあることはご存知ですか?
また、値型や参照型という概念もありますが、こちらもご存知ですか?

たとえば、引数に渡ってくるものが配列だった場合、それを一時的に固定し、アドレスを得てネイティブコードに引き渡すことは意味があるでしょう。

こういった話ではないと言うことであれば、より具体的な質問を書くべきです。
引用返信 編集キー/
■84236 / inTopicNo.3)  Re[1]: ローカル変数と自動変数
□投稿者/ furu (98回)-(2017/06/02(Fri) 12:03:51)
No84231 (古き良き さん) に返信
>
> 関数の引数はローカル変数と自動変数と呼び、スタックで保存するという記憶がありますが。

そうですね。昔はコンパイル時にメモリを確保していましたが
再帰や再入可能,メモリが節約できる、高速などから
最近は、ほとんど、スタックだと思います。

> そうであれば、アドレスの取得は無意味でしょうかどうか。

コンパイラや実行環境(.NETではCLI)が最適化を頑張れば
スタックでなく、アキュムレータやレジスタの場合もあり
アドレス自体が無い場合があります。

やはり「アドレス」を何に使うのかが気になります。
引用返信 編集キー/
■84237 / inTopicNo.4)  Re[2]: ローカル変数と自動変数
□投稿者/ 774RR (529回)-(2017/06/02(Fri) 12:43:57)
.NET の世界を離れてマイコンネイティブの世界ならば

- 自動変数をレジスタに割り振るのは普通の話です(アドレスを取得していない場合)
- 自動変数でもスタックに割り振ることは普通の話です(配列やアドレスを取得している場合)

void func1(int x, int y) {
int z=x+y;
func2(&z);
}
自動変数 x y はレジスタに割り振られる可能性が高い
自動変数 z はスタックに割り振られる可能性が高い

.NET の世界では、自動変数は IL レベルでは抽象的スタックに積まれるし
それが実際の機械語でどのように実装されているかは気にするだけ無駄、ってことで
「アドレスを取得」することにどういうことを期待しているかで話は違ってきそう。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -