main函式之前會執行什麼?

2021-06-26 02:50:08 字數 990 閱讀 9264

我們/* file name test00.c */

int main(int argc, char* argv)

cc test00.c -o test.exe

會生成 test.exe

cc test00.c -nostdlib -o test.exe

undefined symbol: __start

也就是說:

1. 編譯器預設是找 __start 符號,而不是 main

2. __start 這個符號是程式的起始點

3. main 是被標準庫呼叫的乙個符號

通常,我們會在編譯器的環境中找到乙個名字類似於 crt0.o 的檔案,這個檔案中包含了我們剛才所說的 __start 符號。

那麼真正的 crt0.s 是什麼樣子呢?下面我們給出部分偽**:

///section .text:

__start:

:init stack;

init heap;

open stdin;

open stdout;

open stderr;

:push argv;

push argc;

call _main; (呼叫 main)

:destory heap;

close stdin;

close stdout;

close stderr;

:call __exit;

總結:1.設定棧指標

2.初始化static靜態和global全域性變數,即data段的內容

3.將未初始化部分的賦初值:數值型short,int,long等為0,bool為false,指標為null,等等,即.bss段的內容

4.執行全域性構造器,估計是c++中建構函式之類的吧

5.將main函式的引數,argc,argv等傳遞給main函式,然後才真正執行main函式

main 函式之後會執行相反的工作。

main函式執行之前

main函式是我們的主程式入口函式。那麼在執行main函式之前我們的程式幫我們做了些什麼了?實際上在我們的系統裝載程式之後,首先執行的 並不是main的第一行,而是某些特別的 這些 會準備好main函式需要的環境,並且負責呼叫main函式,這時候才可以在main了寫各種業務 1 設定棧指標。2 初始...

main之前執行

分類 c 2013 01 25 14 56 1480人閱讀收藏 舉報 一 main結束 不代表整個程序結束 1 全域性物件的建構函式會在main 函式之前執行,全域性物件的析構函式會在main函式之後執行 用atexit註冊的函式也會在main之後執行。2 一些全域性變數 物件和靜態變數 物件的空間...

main函式之前還能執行程式?

在了解這個之前,我們首先要知道 四區的概念 堆區和棧區顯然都是在程式執行後進行的,所以它們都是在main後面。因此就需要從全域性區和 區入手,區顯然不行,因此只剩下全域性區了。結果也就是可以定義全域性物件或者變數。定義全域性物件或者變數 全域性變數 當定義全域性變數a的時候,就會呼叫show函式,因...