C/C++ 程序执行的主要过程

在这里插入图片描述

预处理(Preprocessing)

  • 任务:
    处理源代码中以 # 开头的预处理指令,包括:
    • 头文件包含(#include):将头文件(如 stdio.h)的内容直接插入到源文件中。
    • 宏替换(#define):将代码中的宏定义(如 #define PI 3.14)进行文本替换。
    • 条件编译(#ifdef #else #endif 等):根据条件决定代码的保留或删除(例如,区分调试和发布版本的代码)。
  • 输出:生成一个经过预处理的中间文本文件(仍为可读文本,但已展开所有预处理指令)。

编译(Compilation)

  • 任务:
    将预处理后的代码转换为汇编语言代码。编译器会进行以下操作:
    • 词法分析:将代码分解成一个个单词(Token),例如识别关键字、变量名、操作符等。
    • 语法分析:检查代码是否符合 C/C++ 语法规则(如括号是否匹配、语句是否完整)。
    • 语义分析:检查代码的语义正确性(如变量是否先定义后使用、类型是否匹配)。
    • 中间代码生成与优化:生成中间表示代码,并进行优化(如删除无用代码、优化循环),最终转换为汇编语言。
  • 输出:生成汇编代码文件(如 Helloworld.s)。

汇编(Assembly)

  • 任务:
    汇编器(Assembler)将汇编语言代码转换为机器可识别的二进制目标文件(Object File,如 Helloworld.obj 或 Helloworld.o)。每个汇编指令会被映射为对应的机器码。
  • 输出:生成二进制目标文件,此时文件中可能仍包含对其他函数(如标准库函数 printf)的未解析引用。

链接(Linking)

  • 任务:
    链接器(Linker)将多个目标文件(包括自身代码生成的 .obj 和依赖的库文件)链接成一个可执行文件(如 Helloworld.exe)。分为两种方式:
    • 静态链接:将库函数的代码直接复制到可执行文件中,最终文件较大,但运行时无需依赖外部库。
    • 动态链接:仅记录对库函数的引用信息,运行时由操作系统加载对应的动态链接库(如 .dll 在 Windows 或 .so 在 Linux)。
      链接过程会解析目标文件中的外部符号引用(如解决 printf 的具体实现来自哪里)。
  • 输出:生成可直接运行的可执行文件。

运行(Execution)

  • 任务:
    操作系统加载可执行文件到内存中,创建进程,分配资源(如内存、文件句柄),然后执行程序的指令。程序从 main 函数开始执行,直到遇到 return 或 exit 等退出操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间序列预测建模的完整流程以及数据分析【学习记录】

文章目录 1.时间序列建模的完整流程2. 模型选取的和数据集2.1.ARIMA模型2.2.数据集介绍 3.时间序列建模3.1.数据获取3.2.处理数据中的异常值3.2.1.Nan值3.2.2.异常值的检测和处理(Z-Score方法) 3.3.离散度3.4.Z-Score3.4.1.概述3.4.2.公式3.4.3.Z-Score与…

ValueError: Caught ValueError in DataLoader worker process 0.

参考链接: https://stackoverflow.com/questions/1841565/valueerror-invalid-literal-for-int-with-base-10 它提示我有个地方值错误空字符 果然因为格式处理没有传进去东西,找下原因,让它正常处理 原来是相对路径的.影响了程序运行 将v…

JavaScript性能优化实战,从理论到落地的全面指南

在前端开发领域,JavaScript的性能优化是提升用户体验的核心环节。随着Web应用复杂度的提升,开发者面临的性能瓶颈也日益多样化。本文将从理论分析、代码实践和工具使用三个维度,系统性地讲解JavaScript性能优化的实战技巧,并通过大…

SQL、Oracle 和 SQL Server 的比较与分析

SQL、Oracle 和 SQL Server 的比较与分析 一、基础概念 1. SQL (Structured Query Language) 定义:结构化查询语言,用于管理关系型数据库的标准语言类型: DDL (数据定义语言):CREATE, ALTER, DROPDML (数据操作语言)&#xff1…

Telnet 类图解析

Telnet 类图(文本描述) --------------------------------------- | Telnet | --------------------------------------- | - host: str | # 目标主机 | - port: int …

Ansible安装与核心模块实战指南

Ansible安装与核心模块实战指南 自动化运维入门:从安装到模块化任务配置 Ansible作为一款无代理自动化工具,通过模块化设计实现高效管理,尤其适用于快速部署、配置和维护大规模系统。本文将从安装、核心模块使用到实际案例,全面解析其核心功能与最佳实践。 一、Ansible安装…

VLLM推理大模型显存不够后,导致程序引擎崩溃的调优方案尝试

背景介绍 硬件 A800 80G模型 chat-glm4-9b-128K环境 生产正常显存占用情况 glm4 占用32GB 其他显存工占用38GB左右 总共剩余10GB。 问题描述 推理时报错日志,由于内网环境无法拿出日志,与下面的类似。 File "/data/miniconda3_new/envs/vllm-new…

【Nacos】env NACOS_AUTH_IDENTITY_KEY must be set.

【Nacos】env NACOS_AUTH_IDENTITY_KEY must be set. 问题描述 env NACOS_AUTH_IDENTITY_KEY must be set.原因分析 在 .env 文件中设置 Nacos 身份验证相关的所有必要环境变量。 解决方案 添加到 .env 文件中 NACOS_AUTH_IDENTITY_KEYAuthorization NACOS_AUTH_IDENTITY…

C++语法基础(下)

(注:在看本文是如果感觉内容有点突兀,请先浏览《C语法基础(上)》这篇文章帮助更好理解) 一.缺省参数 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参…

力扣Hot100(Java版本)

1. 哈希 1.1 两数之和 题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同…

FCB文件疑问+求助:01 百度网盘视频自动生成AI笔记pdf会出现对应fcb文件-作用待详解

疑问求助:01 百度网盘视频自动生成AI笔记pdf会出现对应fcb文件-作用待确认确认详解.md 一、疑惑起因 百度网盘视频自动生成AI笔记pdf会出现对应fcb文件,我可以删除fcb文件么?影响什么?如何打开fcb其内容是啥?直观看删…

【数据结构】——栈和队列OJ

一、有效的括号 题目链接: 20. 有效的括号 - 力扣(LeetCode) 题目的要求很简单,就是要求我们判断其输入的括号字符串是否是有效的括号,那么我们要如何判断呢? 我们可以这样,我们遍历出传入的…

开源免费无广告专注PDF编辑、修复和管理工具 办公学术 救星工具

各位PDF处理小能手们!我跟你们说啊,今天要给大家介绍一款超牛的国产开源PDF处理工具,叫PDFPatcher,也叫PDF补丁丁。它就像一个PDF文档的超级修理工,专门解决PDF编辑、修复和管理的各种难题。 这软件的核心功能和特点&a…

【Bluedroid】蓝牙 HID DEVICE 初始化流程源码解析

本文深入剖析Android蓝牙协议栈中HID设备(BT-HD)服务的初始化与启用流程,从接口初始化、服务掩码管理、服务请求路由到属性回调通知,完整展现蓝牙HID服务激活的技术路径。通过代码逻辑梳理,揭示服务启用的核心机制&…

2025年项目管理软件革命:中国技术主权与全球创新浪潮的交锋

全球项目管理软件市场正在经历一场由多重技术叠加引发的结构性变革。根据Gartner最新预测,到2025年项目管理工具市场规模将突破220亿美元,其中中国市场增速达38%,远超全球平均水平。这场变革不仅关乎工具功能迭代,更深刻影响着企业…

计算机组成与体系结构:组相联映射(Set-Associative Mapping)

目录 🧩 映射方式问题回顾 🏗️ 组相联映射 工作流程 地址结构 ♻️ 替换策略 示例: 优点 ⚖️ 与其他映射方式对比 🧩 映射方式问题回顾 直接映射的问题: 优点:实现简单,查找速度快…

机器学习第八讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列

机器学习第八讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:…

基于Spring AI实现多轮对话系统架构设计

文章目录 基于Spring AI实现多轮对话系统架构设计 前言 一、多轮对话系统核心架构 1.1 架构概览 1.2 Spring AI核心优势 二、ChatClient与多轮对话设计 2.1 ChatClient的特性与角色 2.2 实现多轮对话方法 三、Advisors拦截器机制 3.1 Advisors概念与工作原理 3.2 对…

C++中的虚表和虚表指针的原理和示例

一、基本概念 1. 什么是虚函数(virtual function)? 虚函数是用 virtual 关键字修饰的成员函数,支持运行时多态(dynamic polymorphism)。通过基类指针或引用调用派生类重写的函数。 class Base { public:…

FPGA:XILINX FPGA产品线以及器件选型建议

本文将详细介绍Xilinx(现为AMD的一部分)当前的FPGA产品线及其主要特点,并提供器件选型的建议。以下内容基于Xilinx FPGA的最新信息,涵盖产品系列、特性及选型指导。由于Xilinx已被AMD收购,产品线以AMD Xilinx品牌为主&…