學習日誌之locate c的執行及解釋

2021-09-23 20:49:59 字數 2064 閱讀 3716

1.locate.c的**展示

2.執行結果

3.相關解釋及知識點

1.locate.c的**如下

#include

#include

#include

static

void

show_pointer

(void

*p,char

*descr)

char big_array[

1l<<24]

;/* 16 mb */

//char huge_array[1l<<31]; /* 2 gb */

char huge_array[

1l<<30]

;/* 1 gb */

int global =0;

intuseless()

int main (

)

2.執行如下

zoe@zoe-virtual-machine:/mnt/hgfs/notepad++$ gcc locate.c

zoe@zoe-virtual-machine:/mnt/hgfs/notepad++$ ./a.out

big array 0x561043850040 94627852255296

huge array 0x561003850040 94626778513472

local 0x7fff383bbb84 140734136826756

global 0x561003850024 94626778513444

p1 0x7f6a4d528010 140094540513296

p2 0x56104680c260 94627902308960

p3 0x56104680c370 94627902309232

p4 0x56104681c380 94627902374784

useless 0x56100364f74d 94626776414029

exit 0x7f6a5d56c120 140094809227552

malloc 0x7f6a5d5c0070 140094809571440

3.詳細解釋及知識點由執行結果和程序的虛擬位址空間的分布我們可以推出,三個全域性變數big array,huge array和global由上至下位於讀/寫資料段(data段);主函式裡的變數local以及p1到p4位於棧,但執行得到的位址實際上是是p1到p4的值,而不是p1到p4的位址,由於呼叫了malloc函式,它們所指的內容位於堆中;函式useless位於**段(text段);庫函式exit和malloc位於堆疊之間的共享庫。(位址是從下往上增大的)

知識點

下圖是示例可執行檔案hello.c程序的虛擬位址空間

●程式**和資料。對所有的程序來說,**是從同一固定位址開始,緊接著的是和

(全域性變數相對應的資料位置。**和資料區是直接按照可執行目標檔案的內容初

始化的,在示例中就是可執行檔案hello。

●堆。**和資料區後緊隨著的是執行時堆。**和資料區在程序一開始執行時就被

指定了大小,與此不同,當呼叫像malloc和free這樣的c標準庫函式時,堆可

以在執行時動態地擴充套件和收縮。

●共享庫。大約在位址空間的中間部分是一塊用來存放像c標準庫和數學庫這樣的共

享庫的**和資料的區域。

●棧。位於使用者虛擬位址空間頂部的是使用者棧,編譯器用它來實現函式呼叫。和堆一

樣,使用者棧在程式執行期間可以動態地擴充套件和收縮。特別地,每次我們呼叫乙個函

數時,棧就會增長;從乙個函式返回時,棧就會收縮。

●核心虛擬記憶體。位址空間頂部的區域是為核心保留的。不允許應用程式讀寫這個區

域的內容或者直接呼叫核心**定義的函式。相反,它們必須呼叫核心來執行這些

操作。

學習日誌之runaway c的執行及解釋

1.runaway.c的 展示 2.執行例項 3.詳細解釋及知識點 1.runaway.c 如下 example of deep recursion include include intrecurse int x intmain int argc,char ar 2.執行例項1.不帶引數 x 10...

學習日誌之雜記

今天通過對petium 4的vhd檔案工程進行debug主要發現了如下幾個問題 在carry generator生成進製的邏輯上有問題。在電路中a n b n 為輸入引腳,經過生成了第一層的p和g,其公式如下 然後再經過另乙個結構生成以後的p和g公式為下 在寫carry generator的時候注意...

MySQL學習之執行計畫

執行計畫 乙個預估sql語句執行的時間的操作 關鍵字 explain 雖然有mysql優化的措施避免一些不能命中索引的方式,但是最後還是要看sql語句的執行時間,時間短就是好的。執行計畫是以最壞的打算進行預估sql語句執行的時間,所以只能作為參考。以後拿到乙個sql語句的時候,先進行執行計畫。exp...