コンパイラの最適化機能を用いて関数func1をコンパイルしたところ、図2-3のようなアセンブリプログラムを生成した。
この時以下の問に答えよ
①:最適化機能により引数a,bの扱いがどのように変わったか答えよ。また、どのような性能上の効果が得られたか答えよ
②:2-2に示すアセンブリプログラム中のfunc1本体先頭「addiu $sp,$sp, -24」から始まる4行は、関数func1のどのような性質により図2-3のような最適化による削除が可能であったか、簡潔に答えよ
func1(int a,int b){
int c;
c=a+b;
return c;
}
あまり分からないんです、
解答お願いいたします!
No.3ベストアンサー
- 回答日時:
(2) が本質的に重要なのでこっちを先に書くと, その解答は不完全. 「再帰関数でない」というのは視点として悪くないんだけど, もっときちんと「他の関数を呼び出さない」いわゆる
leaf function
であるということが大事. この関数では leaf function だからスタックフレームが不要だ, ということ. 余計な指摘もしておくと, 「最初の 4行」だけじゃなく
j $31
の直前の 4行も不要になってる.
ちなみに再帰関数であっても tail recursion ならスタックフレームが必須ということでもないし, 逆に再帰関数でなくても他の関数を呼び出す場合には r31 を破壊してしまうので r31 を保存するための領域 (スタックフレーム) は確保しなくちゃならない.
(1) は「変数としてメモリ上におく」代わりに「レジスタに置いたままにする」ことによってメモリアクセスを減らしたので高速化できるよ... だからその解答でおよそ OK. 「他のレジスタ」は指摘しなくてもいいかなって気がする.
ただし, ABI にもよるんだけどこの最適化自体 leaf function であることはおそらく重要. 例えば, 他の関数を呼び出すために $4 を使うとしたら, 「引数 a の値を $4 においたままにする」ことは不可能だよね. あるいは, 「呼び出した関数の中で $5 を壊すかもしれない」としたら, $5 の中身 (引数 b の値) はどこかに保存しなきゃならない.
No.2
- 回答日時:
どこまで理解できてどこでわからなくなっているのか, 具体的に書いてくださいな.
まさか, アセンブリプログラムが全く読めないとか, ニーモニックの意味がわからないとか, そんなことはないよね?
No.1
- 回答日時:
>>あまり分からないんです、
「あまり」ということは、そこそこ判っているところもあるのですよね。
判っているところを元に、もう少し考えたらいいのではないですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
- 統計学 機械学習(最適化問題)のプログラムで、以下の2つの関数がどんな関数なのかご存知の方はおりますか? d 5 2022/06/23 00:35
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
中華ゲーム機のGame Console R3...
-
2002年製のpcと2008製のpcがあ...
-
情シスに異動するには。 非情シ...
-
ソフトに致命的なバグがあるか...
-
PowerShellで自分が書いたコマ...
-
Microsoftが非推奨にしてるかど...
-
スクリープロットの見方。この...
-
Windowsに致命的なバグがあるか...
-
ソフトが安定版かどうかを知る...
-
ソフトは安定版しか使うべきで...
-
PowerShellは大企業で使われて...
-
ファイル名とファイルの中身の...
-
PowerShellの使い方を学ぶのに...
-
PowerShellでバグが起きる確率...
-
SSDを放置していたらファイル名...
-
WinMergeはファイル名を比較す...
-
質問です! 現在就活中で監視方...
-
ハッシュ値を取る時はファイル...
-
マウスにチャタリングが起きな...
-
PowerShellに将来性はあるので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
使用中のセクタが不良セクタに...
-
ファイル構造が破損しているフ...
-
すみません!パソコン開いて電...
-
現在と現在から20年前の2003〜2...
-
2つのファイルのバイナリをコン...
-
SSDを定期的にデフラグした方が...
-
どのストレージが一番高い所か...
-
AzureとOneDriveって何が違うの...
-
SSDに不良セクタがあるかどうか...
-
S.M.A.R.T.を見るのに1番有名な...
-
SSDに不良セクタが発生したら、...
-
次は、どこのメーカーのPCを買...
-
このパソコンは重量が689gと非...
-
ストレージの中に破損している...
-
SSDのデータがビット落ちにより...
-
SSDにTRIMをしたいのですがSSD...
-
コマンドプロンプトって「cmd」と...
-
SSDの不良セクタを代替セクタに...
-
SSDにTRIMってした方が良いので...
-
ファイルを記録してあるセクタ...
おすすめ情報
アセンブリコードが理解したけど、自分で考えた結果が正しいかどうか分からない、自分で考えた回答は以下に書きます
①:
図2-2の引数a,bはまず拡張したスタック空間にプッシュし、他のレジスタ$3と$2にロードして、$3と$2を利用して計算を行う。
図2-3、最適化した場合は引数a,bが他のレジスタに経由せず直接に$4と$5で計算する
ロードとストア命令を削除して、メモリにアクセス時間を略したので、性能上に実行速度が速くなった。
②:
func1は再帰関数ではないので、スタック空間を数回拡張する必要がない、この原因で、スタック空間を拡張するコードを削除することが可能となる
以上は自分の回答です、間違ったところはありますか?また改善できる点がありますか
どなたかご教授いただければ幸いです
よろしくお願いいたします