記憶體那點兒事兒(一)

2021-06-23 02:57:22 字數 1070 閱讀 4036

儲存程式文字,又稱文字段,指令指標從這裡獲得指令,可以被共享。

用來儲存資料。分為初始化為非0的資料區,bbs(block started by symbol 用來存放未初始化的全域性資料和靜態資料)和堆(heap 用來動態分配記憶體,就是說malloc等函式可以在這裡或的分配記憶體,位址是向上增長的)

(stack),堆疊裡存放區域性變數、各個函式的引數、返回位址以及臨時變數,位址是向下增長。

高位址

堆疊段

程式棧(向下增長)

資料段

bbs非零資料

低位址

**

**段

動態記憶體空間:

在堆中分配,實現動態分配的函式有:

stdlib.h:

void *malloc(size_t size); 分配乙個size大小的記憶體空間,返回乙個void型別的指向該空間的指標。

void calloc(size_t nmemb,size_t size);calloc分配的空間大小=nmemb * size,其餘與malloc相同。

void realloc(void *ptr,size_t size);用來重新分配size大小的空間,改變已經分配的空間大小,返回乙個指向新空間的指標。

void free(void *ptr);用來釋放以上3個函式分配的空間。

二、記憶體分配

記憶體分配方式:

內存在程式編譯的時候就已經分配好了,在程式的執行期間,這塊記憶體都是存在的。

eg:全域性變數,static變數

在執行函式的時候,函式裡的區域性變數的儲存單元可以在棧上建立,函式執行結束的時候,這些儲存單元就會自動被釋放。對於棧記憶體分配運算來說,它們是已經在處理器指令集中的,效率高,但是分配記憶體容量還是有限的。

在堆上分配記憶體幼教動態記憶體分配。eg:malloc和free,new和delete,動態記憶體的生存期是由我們決定的。

在使用動態記憶體的時候有注意5點:

sizeof 那點兒事兒

c 用了許久發現我對你的了解還真的不夠,至少可以這樣來評價自己的了解 剛剛接 觸皮毛 所以我打算把c 在系統的複習,或者說重新學習一下。一下我的測試 都是在vc 6.0和32位作業系統下做的測試,參考 c 國際標準1998 和 inside the c object model 一,由sizeof ...

VIM那點兒事兒

一年之前接觸的vim,立馬被傳說的高效率吸引去了,於是大把研究,讀了n久英文教程 後來還是那個水平。知道這幾天又受不了傳統的編輯器,重新收拾起vim,碰見幾個問題,解決。日誌留念。起因是windows下的vim各種bug,如map時無效 用netrw是變成下一行 等很奇異的問題。後來發現把vimrc...

python wraps那點兒事兒

乙個需求的實現 當前,我們有這麼乙個小的需求 通過裝飾器來計算函式執行的時間 計算出這個函式的執行時長 def add x,y add timeit add time.sleep 1 this is add return x y 裝飾器實現 import time import datetime f...