日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言运行环境介绍

發布時間:2024/1/18 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言运行环境介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

介紹

什么是運行環境

為什么要有運行環境

如何理解運行環境

翻譯環境與執環境詳解

翻譯環境介紹

編譯環境詳解

鏈接環境詳解

?一圖勝千言

兩個小問題

執行環境詳解

運行環境執行過程


介紹

什么是運行環境

運行環境指的的是將源文件轉換成程序的過程

為什么要有運行環境

如果沒有運行環境編譯器就無法識別你寫的C語言代碼,也無法將源代碼轉換成可執行程序

如何理解運行環境

運行環境分為:翻譯環境和執行環境

  • 翻譯環境:它用于將源代碼轉換成可執行的機械指令
  • 執行環境:它就是一般說的可執行程序

翻譯環境與執環境詳解

翻譯環境介紹

翻譯環境分為兩步

  • 第一步是編譯,通過編輯器將同一工程內不同的源文件都轉換成目標文件
  • 第二步是鏈接,通過鏈接器將不同的目標文件都鏈接起來形成一個可執行程序,同時連接器還會將標準庫函數中所用到的函數和個人程序庫中所用到的函數連接到該程序中

編譯環境詳解

編譯環境又可以分為三個階段:預處理->編譯->匯編

預處理(*.i)

  • 將#include包含的文件替換到前文件中
  • 預處理指令替換和刪除
  • 將注釋替換成空格

編譯(*.s)

  • 檢查語法與符號等錯誤
  • 符號匯總(記錄下具有外部連接屬性的符號)
  • 將c語言代碼翻譯成匯編代碼

總結:在編譯階段會通過語法分析,詞法分析,語義分析,去檢查代碼中的語法與符號等錯誤還會將具有外部連接屬性的符號記錄下來(函數,全局變量)最后將c語言代碼翻譯成匯編代碼

注:檢查語法錯誤就是在這個階段發生的

匯編(生產可重定位的目標文件 *.o)

  • 將匯編代碼翻譯成二進制指令
  • 形成符號表(將符號匯總記錄下來的符號,形成一個表格,表格記錄了符號名和該符號的地址)

鏈接環境詳解

合并段表:

目標文件在鏈接階段會被分成幾段進行操作,合并段表就是把相關目標文件對應的段鏈接到一起。

?

符號表的合并和重定位:

將不同目標文件中的符號表進行合并,最后通過合并的符號表中的符號地址來確定這個符號到底有沒有存在

?一圖勝千言

兩個小問題

為什么函數不聲明也可以使用?

因為最后鏈接的時候會進行符號合并,可以通過這個合并后的符號表找到該函數的地址

那為什么全局變量需要聲明外部符號?

因為全局變量不聲明在編譯階段的語法分析時就會報錯

執行環境詳解

運行環境執行過程

將程序加載到內存中(在有操作系統的環境中,一般由操作系統來完成,在獨立的環境中需要手動完成)-> 程序開始執行,調用main函數 -> 開始執行程序代碼(這時在程序運行時會調用棧、堆、靜態區等空間來儲存執行過程中創建的變量,字符常量等數據)-> 終止程序,釋放空間

總結

以上是生活随笔為你收集整理的C语言运行环境介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。