栈与堆之间:为什么值类型与引用类型的抉择困扰了开发者三十年

1985年,Bjarne Stroustrup在《The C++ Programming Language》第一版中写道:“C++继承自C的一个关键特性是值语义——对象可以被直接拷贝,而非仅仅通过引用访问。“这一设计决策深刻影响了后来三十年的编程语言演进。然而,同样是面向对象语言,Java在1995年选择了一条截然不同的道路:所有用户定义类型都是引用类型,只有原始类型(primitive types)才是值类型。这两条分道扬镳的路径,至今仍在影响着每一个开发者的日常决策。 ...

15 min · 7410 words

内存序为何多线程程序需要六种不同的同步语义

一个看似简单的计数器,在多线程环境下却能暴露出计算机系统最深层的复杂性。当你写下x++这样的代码时,编译器可能将其重排序,CPU可能延迟写入,缓存一致性协议可能在不同核心间传递失效消息——这些操作并非恶意捣乱,而是现代处理器为了榨取每一分性能而精心设计的优化策略。 ...

8 min · 3811 words

内存屏障:多核编程中被误解最深的概念

2017年,一位资深C++开发者在Stack Overflow上发帖求助:他的无锁队列在x86服务器上运行完美,但移植到ARM服务器后,偶尔会丢失数据。代码经过了多轮Code Review,逻辑无懈可击。最终,一位编译器开发者指出问题所在:缺少一条内存屏障。 ...

9 min · 4343 words