程式設計正規化8 筆記 C C 記憶體

2021-08-07 19:51:00 字數 1019 閱讀 1766

在低位址

malloc分配heap的位址

int* arr=malloc(40*sizeof(int));
160b(實際164b或者168b,多出來的在頭部,用於記錄大小等資訊,但是返回的指標是在這個頭的後面)

執行free函式時,指標會機械地回退4b or 8b 獲取大小資訊,並且free掉後面相應大小的內容

int* arr=malloc(100*sizeof(int));

free(arr+60);

//出錯,指標會調到arr+58/59,將這裡面的內容解釋為記憶體塊大小再釋放

int arr[100];

//這樣靜態申請與堆無關,但也有head資訊

free(array);

arr[-1]=0;

//這樣把頭覆蓋掉了,會出錯

空閒的空間組成乙個鍊錶,每個head資訊都記錄了大小,下次malloc的時候遍歷一遍

怎麼分配《作業系統》會講

free只是把記憶體塊加到空閒鍊錶,因為反正可以覆蓋

作業系統可以把分散的零碎的空間弄成連續的空間,返回控制代碼(二級指標,是乙個指標列表)

void

**handle

=newhandle(40);

handlelock(handle);

//告訴作業系統不要挪動newhandle指向的記憶體,它們正在被控制代碼定址

handleunlock(handle);

void a()

棧裡有指標(棧指標)記錄已分配和未分配的邊界,每有乙個新函式分配區域性變數,他會移動,並將移動後的位址作為函式訪問變數的基位址;函式返回後,棧指標回退。

void b()

void c()

簡單講了下

假設ram有32個通用暫存器

alu進行加法乘法移位操作

雲筆記8 筆記管理

筆記管理 筆記管理的前端顯示 如果筆記名稱不為空,那麼按照名稱查詢。如果筆記名稱為空,筆記內容不為空按照筆記內容查詢。如果筆記名稱和內容都為空,那麼查詢某乙個固定的 layui form item layui inline text name name id name autocomplete of...

程式設計正規化12 筆記 編譯預處理 巨集展開

define w 40 define h 80 define pere 2 w h define max a,b a b?a b max 10,40 預處理替換為 10 40?10 40 速度比函式快 而且不需要管型別 max 40.2,hello 報錯 define func a,b,c char...

Socket程式設計(5)筆記

解析伺服器ip位址 客戶端軟體設計過程中,使用者使用網域名稱是或點分標識,需要將yuing或ip位址轉換為32位ip位址。兩個函式 解析伺服器端口號 客戶端可能使用服務名 如http 標識伺服器端口,需要轉為埠號 解析協議號 需將協議名轉為協議號 tcp客戶端軟體流程 1 確定伺服器的ip位址和埠號...