系統執行hello程式時,發生了什麼

2021-09-10 02:47:17 字數 1164 閱讀 7413

#include int mian ()

它被程式設計師建立,到系統上執行,輸出簡單的訊息,然後終止。

資訊就是位(標記)+上下文

1.源程式開始

程式設計師利用文字編輯器建立並儲存的文字檔案,檔名hello.c。源程式實際上是由值0和1組成位序列,8位一位元組,每個位元組表示文字中的乙個字元(ascii實際就是用唯一單位元組大小的整數值來表示每個字元)

hello.c就是以位元組序列的方式儲存在檔案中,每個位元組都有乙個整數值,這種字元構成的稱為文字檔案,其他檔案都成為二進位制檔案。

系統中所有的資訊都是由一串位表示的,區分資料物件的唯一方法就是我們讀到這些資料時的上下文。不同上下文中,同樣的位元組序列可能表示乙個整數、浮點數、字串和機器指令。(數字的機器表示)

2.程式被翻譯

開始是乙個高階c語言程式(這種形式能被人讀懂),然而為了在系統上執行,每條c語句必須轉化成一系列低階機器語言指令。然後這些指令按照 『可執行目標程式(目標程式)』 的格式打包好,以二進位制磁碟檔案儲存起來。

原始檔到目標檔案的轉化是由編譯器完成的。這個過程可以分為四個階段:(源程式)預處理(被修改的源程式(把頭檔案內容插入源程式))、編譯器(匯程式設計序)、彙編器(可重定位目標檔案(它的位元組編碼是機器語言指令))和鏈結器(把標準c庫中的printf函式合併到hello中,得到目標檔案,這個檔案是可執行的)

3.程式被執行

我們將檔名輸入稱為外殼的應用程式中,系統執行該可執行檔案,輸出hello,world(外殼是乙個命令列直譯器,該命令列第乙個單詞不是乙個內建命令,外殼就會假設是乙個可執行檔案,載入並執行它)

初始 時,外殼程式執行它的指令,等待我們輸入一條指令,我們輸入「./hello」後外殼程式將字元逐一讀入暫存器,再把它放到儲存器中

當我們敲下回車時,外殼程式就知道我們結束命令輸入,然後外殼程式執行一系列指令來載入可執行hello檔案,將hello從磁碟複製到主存(資料中包括最終輸入的字串「hello world \n」)

直接儲存器訪問(dma),資料不經過處理器直接從磁碟到達主存

目標檔案hello 被載入到主存,處理器就開始執行hello程式的main程式中的機器指令,這些指令將「hello world \n」字串從主存複製到暫存器檔案 ,再從暫存器檔案複製到顯示裝置,最終顯示在螢幕上。

執行程式時Warning

執行程式時提出了這個乙個警告 activity not started,its current task has been brought to the front package ying.android import android.os.bundle import android.widget...

main函式執行前發生了什麼

main函式的身前 1.編譯器預設是找 start 符號,而不是 main 2.start 這個符號是程式的起始點 3.main 是被標準庫呼叫的乙個符號 我們寫程式,比如乙個模組,通常要有 initialize 和de initialize 但是我們寫 c 程式的時候為什麼有些模組沒有這兩個過程麼...

hello程式的編寫與執行

在unix系統中可用gcc編譯器對原始檔進行編譯。命令如下 unix gcc o hello.c unix 為shell命令列直譯器的命令提示符,shell命令列直譯器會根據我們輸入的命令呼叫對應的程式,因此輸入gcc之後就是呼叫編譯器對原始檔進行編譯鏈結並生成可執行檔案,儲存在磁碟上。1 2兩步中...