深入理解計算機系統--第七章課後作業
對於問題一,輸出結果如下圖所示:
兩個都是弱定義值,所以連結器隨機選擇一個,而這時在c2.c中,g的值為37(強定義),故c1.c的g為37,呼叫函式f,g變為38
當執行第二條語句時,結果如圖:
多次定義變數g,程式在連結的時候報錯!!!
對於變數g在C1定義一次為23,強定義,在C2也定義一次23,兩次強定義,報錯
我為了驗證這個結論,將global.h的語句寫入c2.c,然後編譯的時候不加-DINITIALIZE
並且C2.c也不加標頭檔案global.h
結果如下:
結果為24,因為在連結c1.c和c2.c的時候,c1弱定義,c2強定義為23,所以呼叫函式f的結果為24,這證明了連結只進行一次,因為全域性變數在呼叫函式f之前修改了一次,
但是並沒有使f中的g發生改變,因該是c1.c中的g在與c2.c連結的時候被c2.c的強定義g
所賦值,這個比c2.c中的g的改變先發生,所以後面的值不影響前面的。
這個輸出的結果與未交換順序的一致,因為連結器只會將強定義覆蓋弱定義,c2.c中的
g=37為強定義,所以不管連結順序如何,結果只會與強定義有關。
相關推薦
深入理解計算機系統--第七章課後作業
對於問題一,輸出結果如下圖所示: 兩個都是弱定義值,所以連結器隨機選擇一個,而這時在c2.c中,g的值為37(強定義),故c1.c的g為37,呼叫函式f,g變為38 當執行第二條語句時,結果如圖: 多次定義變數g,程式在連結的時候報錯!!! 對
深入理解計算機系統----第七章連結
原文連結 https://www.jianshu.com/p/7f27c0316355 目 錄 連結是將各種不同檔案的程式碼和資料部分收集(符號解析和重定位)起來並組合成一個單一檔案的過程。本章節我們將要學習連結器工作的詳細原理。通過對這一方面知識的學習,將有助於理解一些危
讀書筆記:深入理解計算機系統 第七章
int printf(const char * format,...); int global_init_var = 84; int global_uninit_var; void fun1(int i) { printf("%d\n",i); } int main
深入理解計算機系統 第三章大略和第五章大略
$0 一個 編譯 存儲器 系統 32位 做了 ++i 擴展 這2章總結的很少,主要是覺得沒那麽重要。 1.2個操作數的指令,第二個操作數通常是目的操作數:movb a b,move a to b,而add a b,b+=a,指令分為指令類,如mov類:movb,movw,m
深入理解計算機系統 第三章 程式的機器級表示 part1
如題所示,這一章講解了程式在機器中是怎樣表示的,主要講組合語言與機器語言。 學習什麼,為什麼學,以及學了之後有什麼用 我們不用學習如何建立機器級的程式碼,但是我們要能夠閱讀和理解機器級的程式碼。 雖然現代的優化編譯器能夠很有效的將高階程式碼翻譯成機器級的程式碼,但是,為了
深入理解計算機系統 第三章 程式的機器級表示 part2
這周由於時間和精力有限,只讀一小節:3.4.4 壓入和彈出棧資料 棧是一種特殊的資料結構,遵循“後進先出”的原則,可以用陣列實現,總是從陣列的一端插入和刪除元素,這一端被稱為棧頂。 棧有兩個常用指令: push:把資料壓入棧中 pop:刪除資
深入理解計算機系統 第三章 程式的機器級表示 part3
這周看了劉老師提供的相關視訊,以及書中對應的章節“3.7 過程” 這一節分為執行時棧、轉移控制、資料傳送、棧上的區域性儲存、暫存器中的區域性儲存空間和遞迴過程這 6 個小節 其中前 3 小節看懂了一部分內容,後面兩個還沒來得及看,下週看完補上
深入理解計算機系統 第六章 儲存器層次結構
為什麼要學習儲存器的層次結構? 如果我們理解了系統是如何將資料在儲存器層次結構中上上下下移動的,那麼我們就可以編寫自己的應用程式,使得它們的資料項儲存在層次結構較高的地方,在那裡 CPU 能更快地訪問到它們。 區域性性原理 計算機程式傾向於引用臨近於其他最近引用過的資料項
深入理解計算機系統——第六章
有一個 圖片 組成 技術分享 data- 計算機 系統 大量 src 存儲器 磁盤 磁盤可以存儲大量的數據,但是速度慢 磁盤由盤片組成,每個盤片有兩面,上面覆蓋著磁性記錄材料,盤片中央有一個可以旋轉的主軸 深入理解計算機系統——第六章
深入理解計算機系統----第九章虛擬記憶體
原文連結 https://www.jianshu.com/p/e1b82b230917 虛擬儲存器又叫做虛擬記憶體,我們現在的作業系統普遍都支援了虛擬記憶體,這樣做是因為我們同時執行著太多的程式了,就目前我電腦的狀態來看,我既要開啟瀏覽器,又要聽歌,可能同時還登陸的有QQ,如果不使用虛擬記
深入理解計算機系統----第八章異常控制流
原文連結 https://www.jianshu.com/p/c8a6c4154219 目 錄 每次從一條指令過渡到另外一條指令的過程稱為控制轉移,這樣的一個控制轉移序列叫做控制流,如果每條指令都是相鄰的,這樣的過渡就是平滑序列。如果一條指令與另外一條指令不相鄰,這樣突發性
深入理解計算機系統----第六章儲存器層次結構
原文部落格地址:https://www.jianshu.com/p/88c889e4fef3 目 錄 在本章中,我們會先了解儲存技術(SRAM\DRAM\ROM\旋轉固態硬碟),描述這些儲存器是如何被組織成層次結構的。接下來會談到什麼是擁有良好區域性性的程式以及編寫這
深入理解計算機系統----第五章優化程式效能
轉載地址https://www.jianshu.com/p/4586dc676807 編寫執行的快的程式有三個因素:①選擇合適的演算法和資料結構;②理解編譯器的能力,使用有效的方式讓編譯器能進行優化;③對於運算量特別大的程式,可能還需要進行任務分解。在這一過程中可能還需要對程式的可讀性和執
深入理解計算機系統----第四章處理器體系結構
https://www.jianshu.com/p/15210eb3870d?open_source=weibo_search 原文地址 目錄 學習事物是怎樣工作的有其內在價值:處理器是如何工作的對於我們普通人來說一直是個祕密,我們將從零開始構建一個流水線處理器,為了實現這一處理器的軟
深入理解計算機系統 第九章 虛擬記憶體
為了更加有效地管理記憶體並且少出錯,現代系統提供了一種對主存的抽象概念,叫做虛擬記憶體(VM)。 虛擬記憶體提供了三個重要的能力: (1)它將主存看成是一個儲存在磁碟上的地址空間的告訴快取,在主存中只儲存活動區域,並根據需要在磁碟和主存之間來回傳送資料,通過這種方式,它高效
[第五章] 深入理解計算機系統第三版 家庭作業參考答案
5.13 A. 畫圖: 關鍵路徑為第三幅圖加粗部分 B. 下界為浮點加法的延遲界限,CPE 為 3.00 C. 整數加法的延遲界限,CPE 為 1.00 D. 關鍵路徑上只有浮點加法 5.14 v
[第八章] 深入理解計算機系統第三版 家庭作業參考答案
8.9 程序對 併發麼? AB × AC √ AD √ BC √ BD √ CD √ 8.10 A. fork B. longjmp execve C. setjmp 8.11 4次,畫畫程序圖就行了 8.12 8次
深入理解計算機系統第三版家庭作業答案-第二章
2.55-2.57答案:show_bytes 原始碼:#include<stdio.h> typedef unsigned char* byte_pointer; void show_bytes(byte_pointer ch, int len){ prin
深入理解計算機系統 第十章 系統級I/O
關於 內核 檢索 執行 循環 讀取 當前 讀寫 原因 很多高級語言都提供了執行 I/O 的較高級別的函數。為什麽我們還要學習 Unix I/O? 原因:1、由於 I/O 和其他系統概念之間有循環依賴關系,故了解 Unix I/O 將幫助我們理解其他的系統概念 2、有些特
[第三章] 深入理解計算機系統第三版 家庭作業參考答案
人非聖賢孰能無過,歡迎大家提問與糾錯 3.58 long decode2(long x, long y, long z) { y -= z; x *= y; return ((y << 63) >> 63) ^ x; } 3.5