前一篇文章《C 语言面向对象的封装方式》,我介绍了C语言编程常见的两种代码组织方式:
1)函数和数据结构分离
2)封装
并从原理上讲述这两种方式的根本区别。
大型项目中,推荐采用封装的方式,有利于团队协作和每个模块独立演进。
本文,给出一个代码示例,具体展示这两种方式在代码实现上的差别。
业务场景描述如下:
对于数据库、文件系统、存储系统等,数据通常以页(Page)为单位,在数据文件中进行组织。服务进程以页为最小IO单位从磁盘上读出,并在内存中缓存这个页面。后续业务过程如果读取的数据在这个页中,则直接从内存页获取数据。如果要写入新数据,或者要更改原来的数据,则需要找到剩余空间能满足新写入数据大小的Page,然后在目标页中进行写入或者数据修改的动作。由于页上可能会有并发读写操作,因此需要注意加锁。
一个数据页(Page)的内部结构,示例如下:(PostgreSQL的数据页)
PageHeader 是页头部的控制信息,其结构如下: