c++ - 在 Linux 上编程 C++ 与在 Windows 中的 Linux VM 上编程 C++

标签 c++ linux windows unix

在 Linux 上学习 C++ 编程与在 Windows 上通过使用 Linux VM 学习有什么区别吗?

我最初的猜测是没有区别 - VM 只是像普通的 Linux 操作系统一样运行?

我这样做是为了专攻 Linux 上的 C++ 编程,包括 Linux 内核、Linux 的工作原理、IPC、套接字、共享内存、管道等。

最佳答案

当您编写多线程程序或对共享数据执行 IPC 时,您可能会遇到 VM 的最大问题。不幸的是,由于大多数 VM 的工作方式,您最终可能会掩盖时间问题,这些问题会导致 native 运行 Linux 内核的“真实”机器崩溃,或者至少是不希望的行为。例如,由于在运行时不会崩溃而在 VM 上可能看起来是良性的数据争用可能会导致,由于物理机器上固有的更快的计时,真正的数据争用可能很难调试.可能发生的与时间相关的问题的另一个示例可能是您有多个进程使用单个读取器写入管道。由于 VM 的速度,您可能会观察到每个写入进程都能够以原子方式将其整个有效载荷写入管道的行为,即使该有效载荷大于 PIPE_MAX 保证的原子性......如果您针对这种类型的行为进行编程,那么在真机上您最终可能会大吃一惊,因为超过 PIPE_MAX 的任何内容都会与写入管道的其他进程交错。

所以最后,在 VM 上进行多线程编程或共享数据 IPC 时,您能够观察到没有进程数据损坏或潜在数据争用崩溃的事实并不能保证您的程序实际上是无数据竞争,或者它不会在交错操作的时间更快的物理机器上崩溃。 VM 的速度可能只是为您掩盖了这些问题。

关于c++ - 在 Linux 上编程 C++ 与在 Windows 中的 Linux VM 上编程 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14911811/

相关文章:

linux - 打补丁后的内核编译

c++ - C++ 控制台应用程序中的 Windows 控制台光标符号/信号条

windows - Wscript批量编辑多个文件夹的desktop.ini

c++ - 在进程间内存中使用 boost::optional 是否安全?

c++ - 默认参数模板与可变参数模板 : what is the last template parameter?

c++ - 重写的虚函数没有被调用

c++ - 安德森树问题

java - Linux 机器上 Netty 4.1 的性能调优

Linux 中的 C++ Stream 接口(interface)

java - 处理 Windows 文件系统上的 unix 符号链接(symbolic link)文件