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

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

15 min · 7410 words

浏览器吃掉你的内存不是bug,是设计选择

打开任务管理器,你会看到一长串Chrome进程。即使只开了三四个标签页,进程列表里可能已经有十几个"Google Chrome"条目,合计占用超过2GB内存。这个现象让无数用户困惑甚至愤怒:为什么浏览器需要这么多内存? ...

12 min · 5595 words

缺页中断为何让你的程序突然卡顿几十毫秒

在游戏社区论坛上,一个反复出现的问题困扰着许多玩家:明明电脑配置足够,为什么游戏会莫名其妙地"卡顿"?有人用LatencyMon工具分析后发现"Hard Page Faults"数值异常,有人尝试关闭虚拟内存后问题消失,有人升级到SSD后卡顿明显改善。 ...

13 min · 6027 words

无锁编程的内存困境:为什么最难的竟不是算法本身

2015年,Rust核心团队成员Aaron Turon发布了一个名为Crossbeam的库。他在博客中写道:“如果我问Rust社区,构建锁-free数据结构最大的障碍是什么,答案几乎总是一样的——内存管理。” ...

13 min · 6441 words