2012-06-26 102 views
1

考慮下面的程序:大小的文本區域的

#include <stdio.h> 

int main(void) 
{ 
    return 0; 
} 

當我運行以下命令:

 
gcc memory-layout.c -o memory-layout  
size memory-layout 

我得到的輸出:

 
text  data  bss  dec  hex  filename  
960  248   8   1216  4c0  memory-layout 

隨着文本區域包含程序的可執行指令,爲什麼輸出顯示文本區域的大小爲960,這相對於文件大小而言太大指示,據我可以數。

+2

本文可能對您有些興趣:http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html。 –

+0

我認爲返回'0'有點草率,我推薦'#include ',然後返回'EXIT_SUCCESS'。看看傳達意圖有多好? – unwind

回答

3

原因可能是因爲實際的啓動的程序並不是真正的main函數,而是在鏈接階段添加了一段代碼。此代碼在調用main函數之前設置庫,清除BSS段和其他初始化。當您從main返回時,還有代碼可以確保正確清理所有內容。

+0

明白了嗎?你還可以清楚一點嗎?主要內部返回語句的確切用法是什麼?在舊版本的編譯器[x86]中,這不是必需的。爲了什麼目的,它已被包含在更高版本的編譯器中?我聽說它告訴操作系統該程序已成功執行。那爲什麼只有0,爲什麼不是其他的整數?除此之外還有其他原因嗎? –

+0

@algogeek'main'中的'return'是必需的,因爲'main'被聲明爲返回'int',它是標準的。而且你可以返回任何你想要的整數,只是這個零點在歷史上意味着一切都沒問題,而正值則表示失敗。它實際上是這個返回值,它是程序作爲命令執行時shell中的錯誤代碼。 –

+0

@algogeek:'main'中的'return'語句提供程序的退出代碼。如果你在一個操作系統下運行,這個值可以報告給啓動你的程序的人。從C99開始,return語句是可選的,如果執行到達'main'的末尾,則行爲被定義爲與返回'0'相同。 –

相關問題