- 博客(18)
- 收藏
- 关注
原创 深度解析:C 语言的 8 个翻译阶段与 GCC 编译全流程
GCC 就是 GNU 开发的编译器,最初就是由 Richard Stallman 编写的,如果你对 Richard Stallman 以及他所追求的自由不熟悉的话,可以阅读《自由软件和开源软件》。使用 gcc 进行编译时,通常会经历 预处理 、 编译 、 汇编 和 链接 这 4 个阶段。它实际上是通过调用 预处理器 、 编译器 、 汇编器 以及 链接器 来实现这些步骤,所以 gcc 本质上是一个驱动程序(可以通过来查看编译器、汇编器和链接器的子命令);编译 C 源文件 或 指定-x c。
2025-12-04 01:11:42
781
原创 C/C++ 时间旅行和 UB
这篇文章是对《C/C++ 的未定义行为(UB)》的延续,意在描述 UB 行为是否真的会导致程序穿越时空回到过去,以及 C/C++ 标准对时间旅行的态度。 一旦程序运行时真正出现了 UB,那么整个程序都将变的无效,因为它接下来会如何运行是得不到保障的,这种无效性甚至会向前蔓延,比如: 语句 (0) 是合法的,因为此时 p 必然不为空,但语句 (1) 存在解引用空指针的风险,可能会触发 UB。在开启 -O2 优化时,编译器可能会进行如下分析: 最终编译器决定假设
2025-11-25 18:50:17
881
原创 C 语言中 4 种影响程序可移植性的行为
就正确性而言, 地域特定行为是 C 标准明确认可并规范的合法行为。实现者(编译器/标准库)有权决定其具体表现,但必须将这些行为准确无误地记录在文档中。因此,应用程序可以完全信赖并安全地构建于这些行为之上,它们提供了稳定且可依赖的编程接口。就可移植性而言, 此类行为在预设地域环境下具有高度的一致性。其表现差异主要源于对本地文化习俗的合理适配,这使得跨平台的行为变化被限制在可预见的范围内。为达成最佳的可移植性,建议在程序初始化时显式设定地域为"C"或"POSIX"标准,从而锁定统一的行为模式。
2025-11-24 13:34:25
1147
1
原创 【数据库理论】并发控制技术 - 两阶段锁协议(2PL)
避免数据竞争最常用的方式就是通过锁机制,这是一种典型的悲观并发控制策略。S-Lock(D)X-Lock(D)Unlock(D)读写问题与共享-互斥锁问题在本质上是相同的,都是围绕对公共资源的读写操作中可能产生的冲突建模。在读写问题中,只有“读–读”操作不会发生冲突;对应地,在共享-互斥锁模型中,只有共享锁(S 锁)之间是相容的,其它组合均可能冲突。多个事务可以同时对数据项 D 加共享锁(S锁),此时若有事务尝试加互斥锁(X锁),则必须等待所有S锁释放后才能获取。
2025-07-22 22:06:10
776
原创 【PostgreSQL】 统计信息:查询优化与运行监控的基础支柱
在 PostgreSQL 中,统计信息不仅是查询优化器制定执行计划的基础,也在数据库运行监控和自动维护中发挥着重要作用。本文将从统计信息的用途、产生方式和分类三个角度介绍统计信息。
2025-07-22 14:25:20
587
原创 【数据库理论】关系模型 - 概念与理解
关系模型最初是由 E.F.Codd 于 1970 年提出的,是建立在逻辑学和集合论之上的一种数学理论,所以关系模型是非常科学且稳定的理论模型。1970 年发表了 《A Relational Model of Data for Large Shared Data Banks》 ,提出了关系模型的概念;1981 年获得图灵奖时,阐述了论文 《Relational Database: A Practical Foundation for Productivity》;
2024-12-02 09:19:12
1465
原创 自由软件和开源软件
在介绍这两个概念之前,必须先解释一下一下什么是在大多数法律体系下,软件默认的版权状态称为。这意味着,除非软件作者明确声明了其他许可条款,否则该软件的所有权利完全归原作者所有。在没有得到授权或许可的情况下,其他人不能随意使用、复制或分发该软件。为了规范软件的使用,很多软件作者会发布许可证,作为一种法律协议来明确使用规则。软件许可证不仅规定了用户在使用、分发和修改软件时应遵守的条件,还会明确列出用户被授予的权利与限制。例如,它可能会规定是否允许商业用途,是否可以拷贝或修改软件的源码等。
2024-11-28 23:08:32
1364
原创 【数据库理论】事务的调度(一):可串行化
在一个支持并发的 DBMS 系统中,同一时刻可能存在多个事务正在被执行,则它们的执行顺序被称为。如果这些事务是按顺序一个一个的被执行,则这种调度被称为。如果有 n 个事务,则有种不同且有效的串行调度。如果这些事务是交叉执行的,则这种调度被称为。而对来自全部事务的子操作进行调度,最终的结果会远远大于。
2024-11-27 20:06:48
2860
原创 【数据库理论】事务 - ACID 属性
ACID 的概念最初是由美国计算机科学家 James Gray 提出的(他有时也被叫做 Jim Gray),他在论文《The notions of consistency and predicate locks in a database system》中正式定义了数据库事务的概念和数据一致性的机制。后人则在其理论基础上提出了 ACID 理论,它是事务必须具有的 4 种特性(遗憾的是,我们不得不对持有怀疑的态度)。事务的概念是容易理解的,它是一个独立的且不可拆分的操作集合。
2024-11-26 20:40:39
1375
原创 【数据库理论】关系模型 - 第一范式 1NF
最初是由 E.F.Codd 提出的,但 E.F.Codd 曾多次修改其定义,并且他对 1NF 的定义也是模糊的:1972 年《Further Normalization of the Data Base Relational Model》:即属性的值不可以是集合;1990 年《The Relational Model for Database Management Version 2》:即属性的值是原子的,而原子数据是不可以被 DBMS 再进行分解的;
2024-11-25 14:31:10
911
1
原创 【PostgreSQL】pg_upgrade 的使用和流程分析
执行期间可能会启动新旧实例,以下是启动数据库所需的选项,这些选项都是对称的(小写字母的选项用于指定旧实例的信息,大写字母的则用于新实例):在进行文件拷贝时,pg_upgrade 支持使用不同的拷贝模式,以下是文件拷贝相关的选项:如果指定了 选项,则跳过该步骤 ;如果指定了 选项,则程序就此退出不再进行以下操作,因为以下操作会真正改动新实例数据目录的内容:
2024-11-25 13:55:59
1137
原创 【SQL 语言】标准总览
1974 年,IBM 的科研人员和在论文《SEQUEL: A Structured English Query Language》中首次介绍了SQL语言(当时的名称叫做 SEQUEL),他们的这项成功是建立在“黄金十二定律”的基础上,但相比十二定律中的数学化定义,SEQUEL 更易于使用,它采用了简单的关键字语法,使普通用户无需具备深厚的数学背景也可操作关系数据库;从左到右依次为 Edgar F. Codd、Don Chamberlin 和 Raymond Boyce。
2024-11-25 13:05:59
1125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅