これは、コンパイラがコードに対して行ったことです。
コンパイラは、「0.058」を浮動小数点リテラルとして認識しました。文字列を分析して、文字列が表す値を計算し、その値を倍精度浮動小数点値としてエンコードしました。次に、この倍精度値を単精度オブジェクト (double A ではなく float A) に代入していることを認識したため、完全な倍精度値は必要ありませんでした。そのため、コンパイラはそれを単精度に変換しました。結果のエンコーディングは、おそらく 0x3d6d9168 でした。これは、単精度の .058 の一般的な IEEE 754 エンコーディングです。
コンパイラが生成したアセンブリ コードのどこかで、コンパイラはその値 0x3d6d9168 をメモリに格納するディレクティブ (アセンブラへの命令) を生成しました。(これは複雑なプロセスです。アセンブラは、プログラムのイメージの一部となるさまざまなデータの一部として、生成するオブジェクト ファイルに値を書き込みます。そのデータは、プログラムの実行準備が整ったとき、またはプログラムが実行されるときにメモリにロードされます。最初にメモリのその部分にアクセスしようとします。)
さらに、コンパイラは fld 命令「fld dword ptr ds:[00415744h]」を生成しました。この形式のアセンブリを使用するのは久しぶりなので、少しずれているかもしれませんが、命令には「データ セグメント (DS) レジスタをベース アドレスとして使用し、セグメント内のオフセットとして 0x415744 を使用する」とあると思います。その組み合わせは、ダブルワードへのポインターです。そこから 4 バイトを浮動小数点スタックにロードします。(浮動小数点スタックは、プロセッサ内のレジスタの特別なセットです。)
fstp 命令「fstp dword ptr [ebp-8]」は、「拡張ベース ポインター (EBP) レジスターの内容を取得して 8 を引く」という意味です。その値は、ダブルワードへのポインターです。浮動小数点スタックからそのダブルワードに 4 バイトを格納し、浮動小数点スタックから項目をポップします。」</p>
0x415744 は浮動小数点値とは関係がないことに注意してください。これは、定数値が格納されたメモリ内のアドレスです。これらの 2 つの命令は、メモリ内の読み取り専用の場所から定数値をロードし、それを [ebp-8] に格納します。これは、コンパイラが変数 A に値を保持することを決定したメモリ内の場所です。EBP は通常、スタック内の場所を参照するために使用されるため、コンパイラは、変数の値を保持するために、この関数のスタック フレームにメモリを確保していることはほぼ確実です。
最適化をオフにしてこのコードをコンパイルしたと思われます。最適化がオンになっている場合、コンパイラは、浮動小数点値を A に割り当てられたメモリに実際に格納することを気にしない可能性があります。これは、値をすぐに処理するのではなく、A に格納するだけであるためです。しかし、既にわかっています。値を別の場所に保存しているのに、わざわざコピーする必要はありません。代わりに、実際に A の値を使用するコードの後半の場所で、コンパイラはそれを読み取り専用メモリからロードし、計算で直接使用します。(常にそうであるとは限りません。渡されたパラメーターやその他の要因に応じて、コードが複数の可能なパスのいずれかを取る可能性があるため、コンパイラーに何らかのコピーを実行させる必要があるコードを作成することができます。また、コンパイラはコピーを実行して、たどるパスに正しいデータが使用されるようにする必要があります。ただし、一般的には、作成した C コードとコンパイラが生成するアセンブリ命令とが完全に一致することは期待できません)。