1

LinuxでC++をプログラムすることを学ぶことと、WindowsでLinux VMを使用して学ぶこととの間に違いはありますか?

私の最初の推測では、違いはありません-VMは通常のLinux OSであるかのように動作しますか?

これは、Linuxカーネル、Linuxの動作、IPC、ソケット、共有メモリ、パイプなど、LinuxでのC++プログラミングに特化するために行っています。

4

1 に答える 1

5

おそらく、VMで遭遇する最大の問題は、マルチスレッドプログラムを作成しているとき、または共有データに対してIPCを実行しているときに発生します。残念ながら、ほとんどのVMの動作方法が原因で、Linuxカーネルをネイティブに実行している「実際の」マシンでクラッシュを引き起こしたり、少なくとも望ましくない動作を引き起こしたりするタイミングの問題をマスキングしてしまう可能性があります。たとえば、実行時にクラッシュしないためにVMで無害に見える可能性のあるデータ競合は、物理マシンでの本質的に高速なタイミングのために、デバッグが非常に困難な真のデータ競合を引き起こす可能性があります。 。発生する可能性のあるタイミング関連の問題の別の例は、単一のリーダーでパイプに書き込む複数のプロセスがある場合です。VMの速度のため、PIPE_MAXPIPE_MAX...そのタイプの動作をプログラムした場合、実際のマシンでは、パイプに書き込む他のプロセスと何かがインターリーブされるため、大きな驚きに終わる可能性があります。

したがって、最終的に、VMでマルチスレッドプログラミングまたは共有データIPCを実行しているときに、プロセスデータの破損や潜在的なデータ競合によるクラッシュがないことを確認できるという事実は、プログラムが実際にデータ競合であるとは限りません。無料、またはインターリーブされた操作のタイミングがはるかに速い物理マシンでクラッシュしないこと。VMの速度は、単にこれらの問題を覆い隠している可能性があります。

于 2013-02-16T15:50:22.283 に答える