CS 教程 · 第 05 章

软件与程序

软件类型、安装、程序运行原理

5.1 软件的分类

类别 作用 举例
系统软件 管理硬件、提供基础服务 操作系统(Windows/Linux)、驱动程序、编译器
应用软件 完成特定用户任务 浏览器、Office、游戏、微信
中间件 连接不同软件组件 数据库(MySQL)、消息队列(RabbitMQ)、Web服务器(Nginx)

5.2 源代码与编译

程序从人类可读的源代码变成机器可执行的二进制代码,有两种方式:

方式 过程 代表语言
编译型 源码 → 编译器 → 可执行文件 C、C++、Go、Rust
解释型 源码 → 解释器逐行执行 Python、JavaScript、Ruby
混合型 源码 → 字节码 → 虚拟机执行 Java、C#
编译型:hello.c → gcc → hello.exe(可独立运行)
解释型:hello.py → python → 逐行执行(需要Python环境)

5.3 开源 vs 闭源

开源(Open Source) 闭源(Proprietary)
源码可见 ✅ 任何人都能看 ❌ 只有开发者可见
自由修改 ✅ 可以 ❌ 不可以
免费 大多数免费 通常收费
安全审计 任何人都能审 只能信任厂商
代表 Linux、Firefox、VSCode Windows、Office、Photoshop
💡 开源不等于免费,但大部分开源软件确实免费。开源的核心是自由——自由使用、修改、分发。

5.4 包管理器

包管理器是软件管理的革命——一条命令安装、更新、卸载软件。

系统 包管理器 命令示例
Ubuntu/Debian apt `apt install nginx`
macOS Homebrew `brew install python`
Windows winget/choco `winget install Firefox`
Python pip `pip install requests`
Node.js npm `npm install express`

5.5 程序运行时的内存布局

当一个程序运行时,操作系统为它分配一块虚拟内存:

高地址 ┌────────────┐
      │    栈(Stack)  │ ← 局部变量、函数调用,向下增长
      ├────────────┤
      │      ↓       │
      │   空闲区域    │
      │      ↑       │
      ├────────────┤
      │    堆(Heap)   │ ← 动态分配(malloc/new),向上增长
      ├────────────┤
      │  数据段(.data)│ ← 全局变量、静态变量
      ├────────────┤
      │  代码段(.text)│ ← 机器指令,只读
低地址 └────────────┘

理解内存布局有助于理解:为什么"栈溢出"会发生(递归太深),以及为什么指针错误会导致程序崩溃。


📖 上一篇:[第4章:文件系统](04-文件系统.html)
下一篇 · 网络基础 →
Collaplex · 克拉普莱克斯 collaplex.me · 2026 浙ICP备2026080865号