CPU對記憶體管理四

2021-06-23 08:53:25 字數 878 閱讀 1650

交流一下動態陣列的邏輯

std標準模板動態庫中有乙個vector,就是動態陣列

動態陣列實現的就是在執行過程中根據使用多少增加或者減少陣列長度

vevtor有乙個引數,引數填寫的值就是以4k位單位保留的空間

在保留的空間中初始分配乙個頁,寫入資料,提交,在寫入資料在提交,提交是分配頁使用,但是寫入的資料所佔記憶體和小於4k,不會重新分配,檢測機制如果即將大於4k就會在分配乙個頁使用

如果保留的空間不夠使用,realloc會重新保留乙個空間,一般是上次空間的2倍,作業系統的不同倍數不同,然後分配頁,將之前的資料都拷貝進來,然後釋放上次保留的空間,如果這次保留的空間仍然不夠用在realloc,實現的動態陣列長度增長

陣列減少若是減少尾部的資料,那realloc乙個小的空間,將前面用的拷貝進去,釋放之前的保留空間,那尾部的資料就刪掉了

如果是刪掉中間的資料用的迭代指標

剛剛在網上瀏覽了一下怎麼使用std直接使用vector便且試了一下,賦值**如下

需要標頭檔案:

#include "vector"

using std::vector;

vectorvlnts;

//我保留的空間是2,但是迴圈輸入9次,第六行檢測動態陣列裡面存放多少資料,是9,當我寫部落格到這裡的時候忽然想起,保留的空間2是以頁為單位的……8k,有點晚了,改天在試驗吧

vectorv;

v.reserve(2);

char a;

for(int i=0; i<9; i++)

v.push_back(a=getchar());

int nsize = v.empty() ? -1 : static_cast(v.size());

trycatch(const exception& e)

CPU對記憶體管理二

說的是頁定址機制,是上節mmu裡如何將線性位址轉化為實體地址的 32位作業系統管理的記憶體是4g,4g的大小是2的32次方得來的 將32位前10位分割,中間10位分割,後面12位再為乙份 前面的10位成為一級頁表,2的10次方,從0開始,一級頁表中有元素1024個,每個元素為二級頁表的首位址,意思是...

QT中對記憶體的管理

在qt中,一切繼承自qt自有類的類,如果存在parent指標,那麼當parent指標delete時,該類中的指標 它們都屬於parent指標對應的child指標 也會被delete。綜上,如果我們的視窗對應的類所對應的parent指標為null的話,我們還是要進行一次手動的記憶體管理。我這裡舉個例子...

QT中對記憶體的管理

在qt中,一切繼承自qt自有類的類,如果存在parent指標,那麼當parent指標delete時,該類中的指標 它們都屬於parent指標對應的child指標 也會被delete。綜上,如果我們的視窗對應的類所對應的parent指標為null的話,我們還是要進行一次手動的記憶體管理。我這裡舉個例子...