《Linux裝置驅動程式》第八章 分配記憶體讀書筆記

2021-06-16 11:49:39 字數 1611 閱讀 9376

gfp_atomic

gfp_user

gfp_highuser

gfp_noio, gfp_nofs

__gfp_dma

__gfp_highhem

__gfp_cold

__gfp_nowarn

__gfp_high

__gfp_repeat, __gfp_nofail, __gfp_noretry

記憶體區段

size引數

slab_hwcache_align

slab_cache_dma

mm/slab.c

可以使用同乙個函式同時作為constructor和destructor使用,當呼叫的是乙個constructor函式的時候,slab分配器總是傳遞slab_ctor_constructor標誌

void *kmem_cache_alloc(kmem_cache_t *cache, int flags);

void kmem_cache_free(kmem_cache_t *cache, const void *obj);

int kmem_cache_destroy(kmem_cache_t *cache);

快取記憶體的使用統計情況可以從/proc/slabinfo獲得

記憶體池

example

mempool會分配一些記憶體塊,空閒且不會真正得到使用

應盡量避免在驅動程式**中使用mempool

get_free_page和相關函式

__get_free_page(unsigned int flags);

__get_free_pages(unsigned int flags, unsigned int order);

void free_page(unsigned long addr);

void free_pages(unsigned long addr, unsigned long order);

alloc_pages介面

struct page *alloc_page(unsigned int flags, unsigned int order);

struct page *alloc_page(unsigned int flags);

void __free_page(struct page *page);

void __free_pages(struct page *page, unsigned int order);

void free_hot_page(struct page *page);

void free_code_page(struct page *page);

subtopic 7

vmalloc及其輔助函式

vmalloc可以獲得的位址在vmalloc_start到vmalloc_end的範圍中,這兩個符號都在中定義

使用vmalloc函式的正確場合是在分配一大塊連續的、只在軟體中存在的、用於緩衝的記憶體區域的時候

per-cpu變數

獲取大的緩衝區

這些函式要麼分配整個頁,要麼分配不在頁面邊界上對齊的記憶體區

除非使用具有_low字尾的版本,否則分配的記憶體可能會是高階記憶體

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...

第八章(筆記)

能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...

第八章 字典

d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...