/images/avatar.png

Schaepher's Blog

内存分配器

传统的内存分配和现代的内存分配

传统的内存分配是在需要内存的时候使用 malloc() 函数直接向操作系统申请内存,在释放内存的时候用 free() 把内存还给操作系统。

malloc = memory allocate

直接使用这两个函数来管理内存的问题在于,每次申请内存都是一个很耗时的操作,而且频繁申请和释放内存会导致内存有很多碎片(外部碎片)。

简单的 map 实现

In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection. —— wikipedia
在计算机科学中,关联数组、映射、符号表或者字典是一种由一系列(键、值)对组成的集合,且集合中的每个键最多出现一次。

【数据结构】Map (映射)的各种实现

In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection. —— wikipedia
在计算机科学中,关联数组、映射、符号表或者字典是一种由一系列(键、值)对组成的集合,且集合中的每个键最多出现一次。 —— 维基百科

【数据结构】从源码看 PHP 7 数组的实现

本文所用源码为 PHP 7.4.4 的版本。

PHP 7 数组概述

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。 —— PHP 官方文档中文版

文本处理

sed

  • 替换文本(search 替换为 replace)
    sed 's/search/replace/g' text-file.txt

  • 删除空行(包括仅包含空格的行)
    sed '/^\s*$/d' text-file.txt

C 语言实现面向对象(一):初步实现三个基本特征

这篇文章所使用代码的完整版见:https://github.com/schaepher/c-objcet-oriented

相关背景知识

面向对象

面向对象的三个基本特征是:封装、继承、多态。

  • 封装
    隐藏成员变量及成员方法。
  • 继承
    子类可以使用现有类(父类)的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
  • 多态
    由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。

C 语言

C 语言的文件通常分为两种:用于声明的 .h 头文件,用于实现的 .c 文件。