- 1.C++ 程序只需要表现得好像语句是按照顺序执行的。C++ 编译器和计算机自身只要能够确保每次计算的含义都不会改变,就可以改变执行顺序使程序运行得更快。
- 自 C++11 开始,C++ 不再认为只有一个执行地址。C++ 标准库现在支持启动和终止线程以及同步线程间的内存访问。在 C++11 之前,程序员对 C++ 编译器隐瞒了他们的线程,有时候这会导致难以调试。
- 某些内存地址可能是设备寄存器,而不是普通内存。这些地址的值可能会在同一个
线程对该地址的两次连续读的间隔发生变化,这表示硬件发生了变化。在 C++ 中用
volatile 关键字定义这些地址。声明一个 volatile 变量会要求编译器在每次使用该变
量时都获取它的一份新的副本,而不用通过将该变量的值保存在一个寄存器中并复用它
来优化程序。另外,也可以声明指向 volatile 内存的指针。
- C++11 提供了一个名为 std::atomic<> 的特性,可以让内存在一段短暂的时间内表现得
仿佛是字节的简单线性存储一样,这样可以远离所有现代处理器的复杂性,包括多线程
执行、多层高速缓存等。有些开发人员误以为这与 volatile 是一样的,其实他们错了。
- 操作系统也欺骗了程序和用户。实际上,操作系统的目的就是为了给每个程序讲一个让它
们信服的谎言。最重要的谎言之一是,操作系统希望每个程序都相信它们是独立运行于计
算机上的,而且这些计算机的内存是无限的,还有无限的处理器来运行程序的所有线程。
操作系统会使用计算机硬件来隐藏这些谎言,这样 C++ 不得不相信它们。除了降低程序的运
行速度外,这些谎言其实对程序运行并没有什么影响。不过,它们会导致性能测量变得复杂。
posted @
2024-12-17 23:03
欧吼吼
阅读(
2)
评论()
编辑
收藏
举报