0%

一直听说 C++ 继承体系中对虚函数调用的动态绑定是基于虚函数表和虚表指针的,但是因为一些原因,我一直没有去搞清楚。今天想起这件事情,就去翻看了 C++ 的标准文档。然而,标准文档只提及了动态绑定的各种规则,却并没有提及任何有关虚函数表或虚表指针的内容。显然,我看的不会是假的标准文档,那么只可能是动态绑定是由编译器实现决定的了。

本想具体详细地写一写虚函数表相关的问题,但已入深夜,就简单记录一份实验的代码吧。详细的内容待后续再讨论。

阅读全文 »

最近在讨论多线程编程中的一个可能的 false sharing 问题时,有人提出加 volatile 可能可以解决问题。这种错误的认识荼毒多年,促使我写下这篇文章。

阅读全文 »

现代编程语言,大都在标准库中包含了随机库。例如,C++ 在 C++11 标准中添加了 random 头文件,提供了现代的随机库;Python 则有 random。C++11 的随机库将生成随机数的过程在逻辑上切分成了两个步骤:随机数生成引擎和分布。在学习 C++11 的 random 库时,std::mt19937 这一随机数生成引擎的名字看起来十分奇怪,成功吸引了我的注意力。

查询后得知,std::mt19937 中的 MT 是 Mersenne Twister 的缩写,这是伪随机数生成算法的名字(梅森旋转算法);而 19937 则取自算法中用到的梅森素数 $2^{19937} - 1$。这里,梅森素数是算法生成伪随机数的循环长度(period),而旋转则说的是算法内部对定长二进制串循环位移的过程。

此篇讲解梅森旋转算法的一些原理,并介绍对其的一个「爆破」方法。

阅读全文 »