詳しくはこちらトピックに返信するユーザー名:メールアドレス:件名:C言語において、左辺と右辺が異なるかどうかを比較する演算子を答えよ:答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。VMAのアドレス空間が用いられると考えられます。自動的に決定するため、LMAの指定は無視される、と考えられます。x86などではCPUの機能によりプログラムから見えるアドレス(仮想アドレス)を同じにすることができます。1ヶ月前すごくわかりやすい回答ありがとうございます。「LMAは実行開始前に用いるローダ用のアドレス空間」「VMAはプログラムから取得できる実行中のアドレス空間」と理解すると、今までの謎が解けましたまた、一般的なOS上で動くアプリケーションなどはLMAは基本的に使われないが、組み込みOSなどでは使われることが多いということですね!たしかにLMAが無視されていると考えると辻褄が合いますね...長い間の謎が解けたのでスッキリしております。ありがとうございました!すごくわかりやすい回答ありがとうございます。「LMAは実行開始前に用いるローダ用のアドレス空間」「VMAはプログラムから取得できる実行中のアドレス空間」と理解すると、今までの謎が解けましたまた、一般的なOS上で動くアプリケーションなどはLMAは基本的に使われないが、組み込みOSなどでは使われることが多いということですね!たしかにLMAが無視されていると考えると辻褄が合いますね...長い間の謎が解けたのでスッキリしております。FPGA開発日記などいろいろ出てきました。このサイトの情報と照らし合わせて考えると、ここでの「ローダがプログラムを読み込む」というのは、CPUによるプログラムの実行開始前に用いる、ローダ用のアドレス空間を用いて読み込むことであり、プログラムから取得できるアドレスはCPUによるプログラムの実行中に用いるアドレス空間、すなわちVMAのアドレス空間が用いられると考えられます。これは予想ですが、リンカスクリプトはLMAの指定が必要な組み込みプログラムの開発でも使えるようにLMAを指定する機能があるが、パソコンのOS上ではローダがその時の空きメモリの位置などに基づいてプログラムをメモリ上のどこに置くかを自動的に決定するため、LMAの指定は無視される、と考えられます。プログラムをメモリ上のどこに置いても、x86などではCPUの機能によりプログラムから見えるアドレス(仮想アドレス)を同じにすることができます。FPGA開発日記[/url]などいろいろ出てきました。このサイトの情報と照らし合わせて考えると、ここでの「ローダがプログラムを読み込む」というのは、CPUによるプログラムの[b]実行開始前[/b]に用いる、[b]ローダ用のアドレス空間[/b]を用いて読み込むことであり、プログラムから取得できるアドレスはCPUによるプログラムの[b]実行中[/b]に用いるアドレス空間、すなわちVMAのアドレス空間が用いられると考えられます。これは予想ですが、リンカスクリプトはLMAの指定が必要な組み込みプログラムの開発でも使えるようにLMAを指定する機能があるが、パソコンのOS上ではローダがその時の空きメモリの位置などに基づいてプログラムをメモリ上のどこに置くかを自動的に決定するため、LMAの指定は無視される、と考えられます。プログラムをメモリ上のどこに置いても、x86などではCPUの機能によりプログラムから見えるアドレス(仮想アドレス)を同じにすることができます。1ヶ月前こんにちは、ユーマと申します。リンカスクリプトの実験をしていたところ、VMA(仮想アドレス)とLMA(物理アドレス)について混乱したので質問させていただきました。ローダに対して指定するアドレスだと思っています。組み込みOSなどでは、ROMにプログラムを書き込んでおいて(このアドレスがLMA)、プログラム実行開始直後にRAMにコピーするという処理が行われているようなので(このアドレスがVMA)、僕の認識と一致すると思いますですが、なんだかもやもやします。VMAとLMAを分ける理由というのはなんなのでしょうか?二つがなければ困る理由はあると思うのですが、理解が浅くいまいちピンときません。最近Ubuntuの上でglibcに頼らずにCプログラミングしています。その時にリンカスクリプトも自作していたのですが、その時にもVMAとLMAに対する不思議な現象(?)が起きました。みたいな感じに指定してプログラムを実行していたのですが、実際に動作しているプログラムは8048000台のアドレスでした。(実行しているアドレスを調べるために次のような関数をmain関数の中で使いました。返り値に呼び出し元のアドレスが返ります。0x8000000になるはずで、僕の予想は0x8000000に近いものになると思っていました。(LMAはローダがプログラムを読み込む番地のはずだから)ですが、実際にプログラムが読み込まれているのは0x8048000。LMAを基準にローダがプログラムをメモリに読み込んでいないような気がします。VMAを基準にしてローダがプログラムを読み込むなら、そもそもLMAなどはいらないのでは?と思ってしまいます。ここで指定しているVMA・LMAとは何なのでしょうか?なにかとんでもない勘違いをしているのは決定的なのですが、自分ではよくわかりません。僕がよくわかっていないので文章も読みずらいと思いますが、よろしくお願いいたします。こんにちは、ユーマと申します。リンカスクリプトの実験をしていたところ、VMA(仮想アドレス)とLMA(物理アドレス)について混乱したので質問させていただきました。ローダに対して指定するアドレスだと思っています。組み込みOSなどでは、ROMにプログラムを書き込んでおいて(このアドレスがLMA)、プログラム実行開始直後にRAMにコピーするという処理が行われているようなので(このアドレスがVMA)、僕の認識と一致すると思いますですが、なんだかもやもやします。VMAとLMAを分ける理由というのはなんなのでしょうか?二つがなければ困る理由はあると思うのですが、理解が浅くいまいちピンときません。最近Ubuntuの上でglibcに頼らずにCプログラミングしています。その時にリンカスクリプトも自作していたのですが、その時にもVMAとLMAに対する不思議な現象(?)が起きました。みたいな感じに指定してプログラムを実行していたのですが、実際に動作しているプログラムは8048000台のアドレスでした。(実行しているアドレスを調べるために次のような関数をmain関数の中で使いました。返り値に呼び出し元のアドレスが返ります。0x8000000になるはずで、僕の予想は0x8000000に近いものになると思っていました。(LMAはローダがプログラムを読み込む番地のはずだから)ですが、実際にプログラムが読み込まれているのは0x8048000。LMAを基準にローダがプログラムをメモリに読み込んでいないような気がします。VMAを基準にしてローダがプログラムを読み込むなら、そもそもLMAなどはいらないのでは?と思ってしまいます。ここで指定しているVMA・LMAとは何なのでしょうか?なにかとんでもない勘違いをしているのは決定的なのですが、自分ではよくわかりません。僕がよくわかっていないので文章も読みずらいと思いますが、よろしくお願いいたします。ミクプラは自由にリンクできます。