• 最新文章
  • 基础必修
  • 编程语言

深入c语言和程序运行原理(31)ABI 与 API 究竟有什么区别?

今天我们来聊另外一个老生常谈的话题:“ ABI 与 API 这两个概念究竟有什么区别?” 也许你之前也思考过这个问题。ABI 与 API 这两个英文缩写只差一个字符,因此它们对应的概念在很多线下讨论和博客文章中会被经常混用,甚至是乱用。当然,时不时地,这个问题也会成为人们在技术社交圈内的丰富谈资。这一讲,就以你熟悉的 C 语言体系为例,我们来一起看看 ABI 与 API 二者分别指代什么内容,有什
深入c语言和程序运行原理(31)ABI 与 API 究竟有什么区别?

深入c语言和程序运行原理(30)C 程序的入口真的是 main 函数吗?

“main 函数是所有 C 程序的起始入口”,相信对于这句话,每个同学在刚开始学习 C 语言时都很熟悉,因为这是一个被各种教材反复强调的“结论”。但事实真是如此吗? 实际上,这句话对,但也不完全对。在一段 C 代码中定义的 main 函数总是会被优先执行,这是我们在日常 C 应用开发过程中都能够轻易观察到的现象。不过,如果将目光移到那些无法直接通过 C 代码触达的地方,你会发现 C 程序的执行流程
深入c语言和程序运行原理(30)C 程序的入口真的是 main 函数吗?

深入c语言和程序运行原理(29)程序可以在运行时进行链接吗?

  在上一讲中,我介绍了有关 Linux 下静态链接的内容。而这一讲,我们将继续程序的“链接”之旅,来看看我之前提到的另外两种链接类型,加载时链接与运行时链接。 实际上,加载时链接与运行时链接均可归为动态链接,只是在这两种方式中,程序进行链接的具体时刻有所不同。其中,加载时链接发生在程序代码被真正执行之前;而运行时链接则可发生在程序运行过程中的任意时刻。 为什么要使用动态链接? 在上一讲
深入c语言和程序运行原理(29)程序可以在运行时进行链接吗?

深入c语言和程序运行原理(28)编译器在链接程序时发生了什么?

我曾在 02 讲 的最后提到,C 代码的完整编译流程可以被分为四个阶段:代码预处理、编译优化、汇编,以及链接。在前三个阶段中,编译器会对输入的源代码文件依次进行分析、优化和转换,并生成可以在当前平台上使用的对象文件。紧接着,链接过程可以将程序依赖的所有对象文件进行整合,并生成最终的二进制可执行文件。 今天,我就来带你深入看看,这个“链接”的过程究竟是怎样执行的。按照发生时刻的不同,链接可以被分为编
深入c语言和程序运行原理(28)编译器在链接程序时发生了什么?

深入c语言和程序运行原理(27)进程是如何使用操作系统内存的?

  对于计算机软件的正常运作,内存(Main Memory)所发挥作用的重要性不言而喻。无论是处在“幕后”的操作系统,还是位于“台前”的用户应用程序,它们在运行时都会将所需数据从磁盘等外部存储器转移至内存。实际上,内存和 CPU 芯片上的 L1、L2 等高速缓存,一同构成了计算机中用于支撑程序高效运行的缓存系统。 今天,我们会先从整体的视角看看内存在计算机系统中的作用,然后再一起探究进程
深入c语言和程序运行原理(27)进程是如何使用操作系统内存的?

深入c语言和程序运行原理(26)可执行二进制文件里有什么?

  和之前的内容相比,在这一模块中,我们将会从“台前”走向“幕后”:从由 C 代码直观表示的程序逻辑,走向程序在运行过程中,背后与操作系统交互时的具体原理。相信学习完这个模块后,你会对一个 C 程序从代码编写,到通过编译,再到最终被操作系统运行的完整过程有更深入的理解。其中,程序的运行细节仅与所在操作系统紧密相关,因此,这一模块中介绍的原理性知识也同样适用于由 Rust、C++,以及 G
深入c语言和程序运行原理(26)可执行二进制文件里有什么?

深入c语言和程序运行原理(24)实战项目(上):一个简单的高性能 HTTP Server

  在“C 核心语法实现篇”中,通过观察 C 代码被编译后的产物,我们了解了 C 基本语法在机器指令层面的多种具体实现细节。进入“C 工程实战篇”后,通过探索 C 标准库,我们发现了 C 语言为我们提供的更多优秀能力,并同时深入分析了它们的内部实现原理。在此基础之上,通过探讨 C 项目编码规范、代码优化技巧、自动化测试与结构化编译等话题,我们对 C 语言在实际工程中的应用方式又有了更深刻
深入c语言和程序运行原理(24)实战项目(上):一个简单的高性能 HTTP Server

【面试题库】150 道大厂常考的 MySQL 高频面试题,你会几道?

一、 Mysql 索引 1.1 Mysql 如何实现的索引机制? InnoDB 索引与 MyISAM 索引实现的区别是什么? 一个表中如果没有创建索引,那么还会创建 B+ 树吗? 1.2 说一下 B+ 树索引实现原理(数据结构) 聚簇索引与非聚簇索引 B+ 树实现有什么区别? 说一下 B+ 树中聚簇索引的查找(匹配)逻辑? 说一下 B+ 树中非聚簇索引的查找(匹配)逻辑? 平衡二叉树,红黑树,B
【面试题库】150 道大厂常考的 MySQL 高频面试题,你会几道?