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.pswp.cn/pingmian/80636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80636.shtml
英文地址,請注明出處:http://en.pswp.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品牌為主&…