1. 程式人生 > >Summary Day30

Summary Day30

鏈表 ace 內存地址 post get 全局 span 同進程 rac

1.內存管理

1.1 進程中的內存區域劃分

代碼區 僅僅讀常理區 全局區 BSS 堆 棧


1.2 字符串存儲形式之間的比較

字符指針,字符數組。字符動態內存


1.3 虛擬內存管理技術

Unix/Linux系統總的內存都是採用虛擬內存管理技術進行管理。即:每一個進程都有0~4G的內存地址

(虛擬的並非真實存在的),由操作系統負責把內存地址和真實的物理內存映射起來,因此,不同進程

的內存地址看起來是一樣的,可是所相應的物理內存是不一樣的。

用戶空間 0~3G。 虛擬內核空間3~4G


1.4 段錯誤的由來

(1)scanf函數缺少 &

(2)空指針、野指針的使用

(3)師徒使用一個沒有經過映射的虛擬地址可能引發段錯誤

1.5使用malloc申請動態內存的特性

須要額外的12個字節用於存儲管理動態內存信息

採用鏈表的方式處理多個內存塊

使用malloc千萬不要越界

(2)使用malloc 申請內存的一般映射

一般說來。使用malloc申請較小的內存時,操作系統一次性分配33個內存頁

#include <unistd.h>

getpid() 獲取當前進程的進程號

cat / proc/ 進程號/maps 查看指定進程的內存分配情況

1.6使用free釋放動態內存特性

1.7 內存處理相關函數

(1)getpagesize 函數

函數功能:

主要用於獲取當前系統中一個內存頁大小。一般為4kb


(2)sbrk函數

#inlcude <unistd.h>

void *sbrk(intptr_t increment);

(3)brk函數

int brk(void *addr);

sbrk 申請 brk 釋放

Summary Day30