已經有相當一段時間了,我一直使用C/C++進行編程,但有些地方仍然沒有出現。也許我沒有閱讀過寫得很好的權威材料。有關如何編譯的程序與操作系統交互的問題
(1)在Linux/Unix中,用戶程序的規模有多大?程序可以具有的最大堆棧大小?用戶程序可以使用堆中的最大內存量? (2)我知道一個C可執行文件有數據段,代碼段&堆棧段。如果程序進入許多遞歸調用,它將需要大量的堆棧。這是預定義大小的堆棧,還是隨着遞歸增加而增長。在成長的情況下,程序的地址空間也必須動態增加?如果是這樣,那會不會減慢程序? (3)類似地,當堆的內存被分配給運行時程序malloc的程序時,該堆的區域將需要被添加到程序的地址空間中?因此在這種情況下,程序的頁面表也需要更新。我的理解是否正確? (4)爲什麼2個文件(我打算組合成單個可執行文件)不能有一個同名的全局變量。這將有助於瞭解目標文件的外觀。
增加:
我從http://www.open-std.org/jtc1/sc22/wg...docs/n1256.pdf讀取ISO C99標準。 它說,第42頁:
identi網絡ERS 1的identi網絡ER在不同範圍內或在同一範圍內聲明的6.2.2的聯繫不止一次可以 由通過這個過程被稱爲聯動指的是同一對象或函數。有 三種聯繫:外部,內部和無。
2在構成整個程序的翻譯單元和庫集中,每個 聲明具有外部鏈接的特定標識符表示相同的對象或 函數。在一個翻譯單元內,每個與內部 連接的標識符聲明表示相同的對象或功能。每個沒有 連接的標識符聲明表示一個獨特的實體。
3如果對象或函數的文件範圍標識符聲明包含存儲類speci fi er靜態,則標識符具有內部鏈接。
4對於在存儲類指定符extern中聲明的標識符,該標識符在該標識符的前置聲明是可見的範圍內,如果在先聲明指定了內部或外部鏈接,則在後面的聲明中標識符的鏈接與先前聲明中指定的聯繫相同。如果沒有事先聲明可見,或者事先聲明沒有指定鏈接,那麼標識符具有外部鏈接。
5如果函數的標識符聲明沒有存儲類指定符,則它的鏈接就像使用存儲類指定符extern聲明一樣。如果對象的標識符聲明有文件範圍和沒有存儲級別的speci fi er,其連接是外部的。
看完這個後,看起來如果我在2個源文件中聲明一個像int int a這樣的變量。那麼兩者都按照規則5和規則4具有外部聯繫,然後根據規則2,兩者都應該指向同一個對象。那麼爲什麼編譯器會產生問題。標準中暗示我們不能在2個源文件中聲明這樣的內容,並且這會導致編譯錯誤。
謝謝。
http://www.linuxhowtos.org/Tips%20and%20Tricks/ulimit.htm – Anycorn 2011-02-14 06:32:46
-1。四個問題應該作爲四個問題發佈,以便將來可以搜索。當前標題不可搜索 – 2011-02-14 06:44:28