树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用,直观来看,树是以分支关系定义的层次结构。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树来形象表示。树在计算机领域中也得到广泛的应用,如在编译程序中,可用树来表示源程序的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。本章重点讨论二叉树的存储结构及其各种操作,并研究树和森林与二叉树的转换关系,最后介绍几个应用例子。

Read More

本文主要讲述一下gcc程序的编译过程和链接原理。然后再会介绍一下gcc各组件模块及相关的使用方法。当前的操作系统环境以及GCC版本如下:

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial

Read More

FFI库,是LuaJIT中最重要的一个扩展库。它允许从纯Lua代码调用外部C函数,并且可以直接使用C数据结构。

Read More

程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。

Read More

目前数据中心网络广泛应用的Fabric架构中会应用大量的ECMP(Equal-Cost MultiPath Routing, 简称ECMP),其优点主要体现在可以提高网络冗余性和可靠性,同时也提高了网络资源利用率;大量的ECMP链路在特定场景下运行过程中会引发其他问题。例如,当某条ECMP链路断开后,ECMP组内所有链路流量都会被重新HASH,在有状态的服务器区域(如LVS)中将导致雪崩现象,又或者会出现多级ECMP的HASH极化导致链路拥塞等。

Read More