0%

一、循环依赖

在 C 和 CPP 这种有 include 机制的语言中,当项目复杂时,很容易出现一种头文件相互包含的错误,如下所示:

A.h 内容如下:

#ifndef _A_H_
#define _A_H_

#include "B.h"

class A
{
    B* pb;
    void doSomethingA() {
        pb->method();
    }
};

#endif // _A_H_

B.h 内容如下:

Read more »

一、圆周率计算方法综述

1.1 几何

1.1.1 线弧近似法

由古希腊数学家阿基米德提出,它采用多边形周长的方法来近似圆周长,以此求出圆周率。

对于圆的周长计算,有圆周长公式如下

Read more »

一、总论

内存管理的本质是资源管理,也就是很多程序最为重要的功能。

但是不同于 Python 或者 Java 这样有着很好内存抽象和比较大条的内存管理方式(动不动就在堆上分配空间),C++ 在更加“荒蛮”的内存上进行更加精细化的甚至还很有 C 特色的内存管理(并非 C++ 希望如此,只不过脱胎于 C 必然受到 C 的影响),是一件非常难的事情。

所以 C++ 内存管理看上去总是呈现一种“似乎解决了一个根本不会在 Java 中发生的问题”的模式。

二、RAII

Read more »

一、总论

我们常听一个说法“在语法上,C++ 是 C 的超集”,这句话的意思是说,C++ 继承并发展了 C 。这是十分有道理的事情,但是这个说法往往造成两个常见的误解:

  • C++ 继承 C 最重要的东西就是 C 的语法
  • C++ 是完全兼容 C 的

这两点其实并不正确。C++ 作为一门独立的语言,虽然起源于 C ,但是在设计思想上和 C 可以说是截然不同,但是又因为起源于 C ,在设计时又不可避免的带上了 C 的烙印,本文希望探讨一下 C++ 与 C 的继承和发展关系,故起名为“滥觞”。

这章可以看作是“CPP设计-寸步难行”的姊妹篇,这章介绍了 C 和 C++ 的不同,“寸步难行”介绍了 C 和 C++ 的相同之处。

Read more »

很像数学

lisp 真的很像数学,或许这就是 lisp 的特征。它像是一个从计算器程序变成的计算机一样有趣。而 C 则更像是一种由内存驱动变成的计算机。

另外一个很像数学的点就是,lisp 试图用最少的基本结构(可能是数据结构,也可能是过程结构)来描述最多的复杂结构,就像数学在用最少的公理来推导最多的定理一样。

数学家会详细研究房子着火之后的救火步骤,当房子安然无恙时,他们则会将房子点燃,然后心安理得地救火。

语言是什么

Read more »

一、再次回顾启动流程

1.1 stage 1

在学 OS 的时候我就已经写过一篇介绍启动流程的文章了,在我忙了一上午以后重新学了一遍,发现其实之前就已经学的十分详细了,属于是自己造自己的轮子了。不过再次回顾,尤其是结合了自己开发操作系统的经验,还是发现很多重点的,所以再来回顾一遍。

首先是关于启动最初,bios,MBR 和 grub 的区别

Read more »