點擊上方“C語言與CPP編程”,選擇“關注/置頂/星標公眾號”
干貨福利,第一時間送達!
最近有小伙伴說沒有收到當天的文章推送,這是因為微信改了推送機制,有一部分小伙伴刷不到當天的文章,一些比較實用的知識和信息,錯過了就是錯過了,建議大家加個星標??,就能第一時間收到推送。
小伙伴們大家好,我是飛宇。
昨天分享了一篇STL知識點總結的文章:一萬五千字C++STL【容器】詳解 (全網最詳細),很多小伙伴后臺留言希望多分享一些,今天再來分享一個比較貼近底層的文章。
實不相瞞,一個人的力量是有限的,這些文章有的都是群里的小伙伴分享在群里的,我看到了覺得不錯才是公眾號上做進一步分享。
我組建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起進群交流,廣告勿入謝謝。
歡迎你添加我的微信,我拉你進技術交流群。此外,我也會經常在微信上分享一些計算機學習經驗以及工作體驗,還有一些內推機會。
加個微信,打開另一扇窗
前段時間潤去美國的師兄開了一門C/C++的課程,友情幫忙宣傳一下,感興趣的可以看看。
面試的時候經常會被問到 malloc 的實現。從操作系統層面來說,malloc 確實是考察面試者對操作系統底層的存儲管理理解的一個很好的方式,涉及到虛擬內存、分頁/分段等。下面逐個細說。
1. 虛擬內存
首先需要知道的是程序運行起來的話需要被加載的物理內存中,具體到計算機硬件就是內存條。操作系統啟動的時候先把自己加載到物理內存的固定位置(一般為底部),物理內存的其他位置就用來運行用戶程序。程序就是一堆指令,程序運行可以簡單抽象為把指令加載到內存中,然后 CPU 將指令從內存載入執行。
1. 為什么需要虛擬內存?
CPU 對內存的尋址最簡單的方式就是直接使用物理內存地址,這種方式一般叫做物理尋址。早期的 PC 使用物理尋址,而且像數字信號處理器、嵌入式微控制器也使用物理尋址。物理尋址的好處是簡單,壞處也有很多,比如:
不安全:操作系統的地址直接暴露給用戶程序,用戶程序可以破壞操作系統。這種解決方案是采用特殊的硬件保護。
同時運行多個程序比較困難:多個用戶程序如果都直接引用物理地址,很容易互相干擾。那么是不是可以通過不斷交換物理內存和磁盤來保證物理內存某一時間自由一個程序在運行呢?當時是可以的,但是這引入很多不必要和復雜的工作。
用戶程序大小受限:受制于物理內存大小。我們現在的錯覺是應用程序大小都小于物理內存,這主要是因為現在 PC 的物理內存都比較大。實際上只有 1G 物理內存的 PC 是可以運行 2G 的應用程序的。

綜合上面各種缺點,虛擬內存出現了。
2. 虛擬內存概覽
虛擬內存的基本思想是:每個程序擁有獨立的地址空間(也就是虛擬內存地址,或者稱作虛擬地址),互不干擾。地址空間被分割成多個塊,每一塊稱作一頁(page),每一頁有連續的地址范圍。虛擬地址的頁被映射到物理內存(通過 MMU,Memory Management Unit),但是并不是所有的頁都必須在內存中才能運行程序。當程序引用到一部分在物理內存中的地址空間時,由硬件立刻執行必要的映射。當程序引用到一部分不在物理內存中的地址空間時,由操作系統負責將確實的部分裝入物理內存。虛擬地址尋址(也叫做虛擬尋址)的示意圖如下。

3.虛擬內存實現
1.虛擬內存大小
一般是和 CPU 字長相關,比如 32 位對應的虛擬地址空間大小為:0 ~ 2^31。
2. MMU
CPU 將虛擬地址發送給 MMU,然后 MMU 將虛擬地址翻譯成物理地址,再尋址物理內存。那么虛擬地址和物理地址具體是怎么映射的呢?完成映射還需要另一個重要的數據結構的參與:頁表(page table)。頁表完成虛擬地址和物理地址的映射,MMU 每次翻譯的時候都需要讀取頁表。頁表的一種簡單表示如下。

這里頁大小為 p 位。虛擬內存的頁和物理內存的頁大小一樣。虛擬地址的高 n-p 位,又叫做虛擬頁號(Virtual Page Number, VPN),用來索引物理頁號(Physical Page Number,PPN),最后將 PPN 和低 p 位組合在一起就得到了物理地址。
3. 頁表的兩個問題
前面說到用 VPN 來做頁表索引,也就是說頁表的大小為虛擬地址位數 / 頁的大小。比如 32 位機器,頁大小一般為 4K ,則頁表項有 2^32 / 2^12 = 2^20 條目。如果機器字長 64 位,頁表項就更多了。那么怎么解決呢?一般有兩種方法:
倒排頁表。物理頁號做索引,映射到多個虛擬地址。通過虛擬地址查找的時候就需要通過虛擬地址的中間幾位來做索引了。
多級頁表。以兩級頁表為例。一級頁表中的每個 PTE (page table entry)映射虛擬地址空間的一個 4MB 的片,每一片由1024 個連續的頁面組成。一級 PTE 指向二級頁表的基址。這樣 32 位地址空間使用 1024 個一級 PTE 就可以表示。需要的二級頁表總條目還是 2^32 / 2^12 = 2^20 個。這里的關鍵在于如果一級 PTE i 中的頁面都未被分配,一級 PTE 就為空。多級頁面的一個簡單示意圖如下。

多級頁表減少內存占用的關鍵在于:
如果一級頁表中的一個 PTE 為空,那么相應的二級頁表就根本不會存在。這是一種巨大的潛在節約。
只有一級頁表才需要常駐內存。虛擬內存系統可以在需要時創建、頁面調入或者調出二級頁表,從而減輕內存的壓力。
第二個問題是頁表是在內存中,而 MMU 位于 CPU 芯片中,這樣每次地址翻譯可能都需要先訪問一次內存中的頁表(CPU L1,L2,L3 Cache Miss 的時候訪問內存),效率非常低下。對應的解決方案是引入頁表的高速緩存:TLB(Translation Lookaside Buffer)。加入 TLB,整個虛擬地址翻譯的過程如下兩圖所示。


關于虛擬內存還有一些內容比如 page fault 處理,這里就不再贅述了。
2. 分段
1. 分段概述
前面介紹了分頁內存管理,可以說通過多級頁表,TLB 等,分頁內存管理方法已經相當不錯了。那么分頁有什么缺點呢?
共享困難:通過共享頁面來實現共享當然是可以的。這里的問題在于我們要保證頁面上只包含可以共享的內容并不是一件容易的事兒,因為進程空間是直接映射到頁面上的。這樣一個頁面上很可能包含不能共享的內容(比如既包含代碼又包含數據,代碼可以共享,而數據不能共享)。早期的 PDP-11 實現的一種解決方法是為指令和數據設置分離的地址空間,分別稱為 I 空間和 D 空間(其實這已經和分段很像了)。
程序地址空間受限于虛擬地址:我們將程序全部映射到一個統一的虛擬地址的問題在于不好擴張。不如我們程序的地址按先代碼放在一起,然后把數據放在一起,然后再放 XXX,這樣其中某一部分的空間擴張起來都會影響到相鄰的空間,非常不方便。
上面的問題一個比較直觀的解決方法是提供多個獨立的地址空間,也就是段(segment)。每個段的長度視具體的段不同而不同,而且是可以在運行期動態改變的。因為每個段都構成了一個獨立的地址空間,所以它們可以獨立的增長或者減小而不會影響到其他的段。如果一個段比較大,把它整個保存到內存中可能很不方便甚至是不可能的,因此可以對段采用分頁管理,只有那些真正需要的頁面才會被調入內存。

采用分段和分頁結合的方式管理內存,一個地址由兩個部分組成:段和段內地址。段內地址又進一步分為頁號和頁偏移。在進行內存訪問時,過程如下:
根據段號找到段描述符(存放段基址)。
檢查該段的頁表是否在內存中。如果在,則找到它的位置,如果不在,則產生段錯誤。
檢查所請求的虛擬頁面的頁表項,如果該頁面不在內存中則產生缺頁中斷,如果在內存中就從頁表項中取出這個頁面在內存中的起始地址。
將頁面起始地址和偏移量進行拼接得到物理地址,然后完成讀寫。
2. 進程的段
每個 Linux 程序都有一個運行時內存映像,也就是各個段的布局,簡單如下圖所示。

注意上圖只是一個相對位置圖,實際上這些段并不是相鄰的。主要的段包括只讀代碼段、讀寫段、運行時堆、用戶棧。在分配棧、堆段運行時地址的時候,鏈接器會使用空間地址空間布局隨機化(ASLR),但是相對位置不會變。上圖中 .data 等是對應進程中的不同數據的 section ,或者叫做節。簡介如下。
.text: 已編譯程序的機器代碼。
.rodata: 只讀數據。
.data: 已初始化的全局和靜態變量。局部變量保存在棧上。
.bss: 未初始化的全局和靜態變量,以及所有被初始化為 0 的全局或者靜態變量。在目標文件中這個節不占據實際的空間,它僅僅是一個占位符。
3. malloc 實現
1. 堆內存管理
我們常說的 malloc 函數是 glibc 提供的庫函數。glibc 的內存管理使用的方法是 ptmalloc,除此之后還有很多其他內存管理方案,比如 tcmalloc (golang 使用的就是 tcmalloc)。
ptmalloc 對于申請內存小于 128KB 時,分配是在堆段,使用系統調用 brk() 或者 sbrk()。如果大于 128 KB 的話,分配在映射區,使用系統調用 mmap()。
2. brk, sbrk
在堆段申請的話,使用系統調用 brk 或者 sbrk。
int brk(const void *addr); void *sbrk(intptr_t incr);
brk 將 brk 指針放置到指定地址處,成功返回 0,否則返回 -1。sbrk 將 brk 指針向后移動指定字節,返回依賴于系統實現,或者返回移動前的 brk 位置,或者返回移動后的 brk 位置。下面使用 sbrk 實現一個巨簡單的 malloc。
void *malloc(size_t size) {
void *p = sbrk(0);
void *request = sbrk(size);
if (request == (void*) -1) {
return NULL; // sbrk failed.
} else {
assert(p == request); // Not thread safe.
return p;
}
}3. mmap
linux 系統調用 mmap 將一個文件或者其它對象映射進內存。
#include
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);mmap 的 flags 可選多種參數,當選擇 MAP_ANONYMOUS 時,不需要傳入文件描述符,malloc 使用的就是 MAP_ANONYMOUS 模式。mmap 申請的內存在操作系統的映射區。比如 32 位系統,映射區從 3G 虛擬地址粗向下生長,但是因為程序的其他段也會占用空間(比如代碼段必須以特定的地址開始),所以并不能申請 3G 的大小。
4. malloc 和物理內存有關系嗎?
可以說沒關系,malloc 申請的地址是線性地址,申請的時候并沒有進行映射。訪問到的時候觸發缺頁異常,這個時候才會進行物理地址映射。
5. ptmalloc
Malloc實現原理:
因為brk、sbrk、mmap都屬于系統調用,若每次申請內存,都調用這三個,那么每次都會產生系統調用,影響性能;其次,這樣申請的內存容易產生碎片,因為堆是從低地址到高地址,如果高地址的內存沒有被釋放,低地址的內存就不能被回收。
所以malloc采用的是內存池的管理方式(ptmalloc),Ptmalloc 采用邊界標記法將內存劃分成很多塊,從而對內存的分配與回收進行管理。為了內存分配函數malloc的高效性,ptmalloc會預先向操作系統申請一塊內存供用戶使用,當我們申請和釋放內存的時候,ptmalloc會將這些內存管理起來,并通過一些策略來判斷是否將其回收給操作系統。這樣做的最大好處就是,使用戶申請和釋放內存的時候更加高效,避免產生過多的內存碎片。
chunk 內存塊的基本組織單元
在 ptmalloc 的實現源碼中定義結構體 malloc_chunk 來描述這些塊。malloc_chunk 定義如下:
1.struct malloc_chunk {
2. INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */
3. INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */
4.
5. struct malloc_chunk* fd; /* double links -- used only if free. */
6. struct malloc_chunk* bk;
7.
8. /* Only used for large blocks: pointer to next larger size. */
9. struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
10. struct malloc_chunk* bk_nextsize;
11.};chunk 的定義相當簡單明了,對各個域做一下簡單介紹 :
prev_size: 如果前一個 chunk 是空閑的,該域表示前一個 chunk 的大小,如果前一個 chunk 不空閑,該域無意義。
size :當前 chunk 的大小,并且記錄了當前 chunk 和前一個 chunk 的一些屬性,包括前一個 chunk 是否在使用中,當前 chunk 是否是通過 mmap 獲得的內存,當前 chunk 是否屬于非主分配區。
fd 和 bk :指針 fd 和 bk 只有當該 chunk 塊空閑時才存在,其作用是用于將對應的空閑 chunk 塊加入到空閑chunk 塊鏈表中統一管理,如果該 chunk 塊被分配給應用程序使用,那么這兩個指針也就沒有用(該 chunk 塊已經從空閑鏈中拆出)了,所以也當作應用程序的使用空間,而不至于浪費。
fd_nextsize 和 bk_nextsize: 當當前的 chunk 存在于 large bins 中時, large bins 中的空閑 chunk 是按照大小排序的,但同一個大小的 chunk 可能有多個,增加了這兩個字段可以加快遍歷空閑 chunk ,并查找滿足需要的空閑 chunk , fd_nextsize 指向下一個比當前 chunk 大小大的第一個空閑 chunk , bk_nextszie 指向前一個比當前 chunk 大小小的第一個空閑 chunk 。如果該 chunk 塊被分配給應用程序使用,那么這兩個指針也就沒有用(該chunk 塊已經從 size 鏈中拆出)了,所以也當作應用程序的使用空間,而不至于浪費。
chunk的結構
chunk的結構可以分為使用中的chunk和空閑的chunk。使用中的chunk和空閑的chunk數據結構基本項同,但是會有一些設計上的小技巧,巧妙的節省了內存。
使用中的chunk:
說明:
1、 chunk指針指向chunk開始的地址;mem指針指向用戶內存塊開始的地址。
2、 p=0時,表示前一個chunk為空閑,prev_size才有效
3、p=1時,表示前一個chunk正在使用,prev_size無效 p主要用于內存塊的合并操作;ptmalloc 分配的第一個塊總是將p設為1, 以防止程序引用到不存在的區域
4、M=1 為mmap映射區域分配;M=0為heap區域分配
5、 A=0 為主分配區分配;A=1 為非主分配區分配。
空閑的chunk:
說明:
1、當chunk空閑時,其M狀態是不存在的,只有AP狀態,
2、原本是用戶數據區的地方存儲了四個指針,
指針fd指向后一個空閑的chunk,而bk指向前一個空閑的chunk,malloc通過這兩個指針將大小相近的chunk連成一個雙向鏈表。
在large bin中的空閑chunk,還有兩個指針,fd_nextsize和bk_nextsize,用于加快在large bin中查找最近匹配的空閑chunk。不同的chunk鏈表又是通過bins或者fastbins來組織的。
空閑鏈表bins
當用戶使用free函數釋放掉的內存,ptmalloc并不會馬上交還給操作系統,而是被ptmalloc本身的空閑鏈表bins管理起來了,這樣當下次進程需要malloc一塊內存的時候,ptmalloc就會從空閑的bins上尋找一塊合適大小的內存塊分配給用戶使用。這樣的好處可以避免頻繁的系統調用,降低內存分配的開銷。
malloc將相似大小的chunk用雙向鏈表鏈接起來,這樣一個鏈表被稱為一個bin。ptmalloc一共維護了128bin。每個bins都維護了大小相近的雙向鏈表的chunk?;赾hunk的大小,有下列幾種可用bins:
1、Fast bin
2、Unsorted bin
3、Small bin
4、Large bin
保存這些bin的數據結構為:
fastbinsY:這個數組用以保存fast bins。
bins:這個數組用以保存unsorted、small以及large bins,共計可容納126個:
當用戶調用malloc的時候,能很快找到用戶需要分配的內存大小是否在維護的bin上,如果在某一個bin上,就可以通過雙向鏈表去查找合適的chunk內存塊給用戶使用。
1. fast bins。
程序在運行時會經常需要申請和釋放一些較小的內存空間。當分配器合并了相鄰的幾個小的 chunk 之后,也許馬上就會有另一個小塊內存的請求,這樣分配器又需要從大的空閑內存中切分出一塊,這樣無疑是比較低效的,故而,malloc 中在分配過程中引入了 fast bins,
fast bins是bins的高速緩沖區,大約有10個定長隊列。每個fast bin都記錄著一條free chunk的單鏈表(稱為binlist ,采用單鏈表是出于fast bin中鏈表中部的chunk不會被摘除的特點),增刪chunk都發生在鏈表的前端。fast bins 記錄著大小以8字節遞增的bin鏈表。
當用戶釋放一塊不大于max_fast(默認值64B)的chunk的時候,會默認會被放到fast bins上。當需要給用戶分配的 chunk 小于或等于 max_fast 時,malloc 首先會到fast bins上尋找是否有合適的chunk,
除非特定情況,兩個毗連的空閑chunk并不會被合并成一個空閑chunk。不合并可能會導致碎片化問題,但是卻可以大大加速釋放的過程!
分配時,binlist中被檢索的第一個chunk將被摘除并返回給用戶。free掉的chunk將被添加在索引到的binlist的前端。
2. unsorted bin。
unsorted bin 的隊列使用 bins 數組的第一個,是bins的一個緩沖區,加快分配的速度。當用戶釋放的內存大于max_fast或者fast bins合并后的chunk都會首先進入unsorted bin上。chunk大小 – 無尺寸限制,任何大小chunk都可以添加進這里。這種途徑給予 ‘glibc malloc’ 第二次機會以重新使用最近free掉的chunk,這樣尋找合適bin的時間開銷就被抹掉了,因此內存的分配和釋放會更快一些。
用戶malloc時,如果在 fast bins 中沒有找到合適的 chunk,則malloc 會先在 unsorted bin 中查找合適的空閑 chunk,如果沒有合適的bin,ptmalloc會將unsorted bin上的chunk放入bins上,然后到bins上查找合適的空閑chunk。
3. small bins
大小小于512字節的chunk被稱為small chunk,而保存small chunks的bin被稱為small bin。數組從2開始編號,前64個bin為small bins,small bin每個bin之間相差8個字節,同一個small bin中的chunk具有相同大小。
每個small bin都包括一個空閑區塊的雙向循環鏈表(也稱binlist)。free掉的chunk添加在鏈表的前端,而所需chunk則從鏈表后端摘除。
兩個毗連的空閑chunk會被合并成一個空閑chunk。合并消除了碎片化的影響但是減慢了free的速度。
分配時,當samll bin非空后,相應的bin會摘除binlist中最后一個chunk并返回給用戶。在free一個chunk的時候,檢查其前或其后的chunk是否空閑,若是則合并,也即把它們從所屬的鏈表中摘除并合并成一個新的chunk,新chunk會添加在unsorted bin鏈表的前端。
4.large bins
大小大于等于512字節的chunk被稱為large chunk,而保存large chunks的bin被稱為large bin,位于small bins后面。large bins中的每一個bin分別包含了一個給定范圍內的chunk,其中的chunk按大小遞減排序,大小相同則按照最近使用時間排列。
兩個毗連的空閑chunk會被合并成一個空閑chunk。
分配時,遵循原則“smallest-first , best-fit”,從頂部遍歷到底部以找到一個大小最接近用戶需求的chunk。一旦找到,相應chunk就會分成兩塊User chunk(用戶請求大?。┓祷亟o用戶。
Remainder chunk(剩余大小添加到unsorted bin。free時和small bin 類似。
并不是所有chunk都按照上面的方式來組織,有三種列外情況。top chunk,mmaped chunk 和last remainder chunk
1. Top chunk
top chunk相當于分配區的頂部空閑內存,當bins上都不能滿足內存分配要求的時候,就會來top chunk上分配。
當top chunk大小比用戶所請求大小還大的時候,top chunk會分為兩個部分:User chunk(用戶請求大小)和Remainder chunk(剩余大?。?。其中Remainder chunk成為新的top chunk。
當top chunk大小小于用戶所請求的大小時,top chunk就通過sbrk(main arena)或mmap(thread arena)系統調用來擴容。
2. mmaped chunk
當分配的內存非常大(大于分配閥值,默認128K)的時候,需要被mmap映射,則會放到mmaped chunk上,當釋放mmaped chunk上的內存的時候會直接交還給操作系統。
3、Last remainder chunk
Last remainder chunk是另外一種特殊的chunk,就像top chunk和mmaped chunk一樣,不會在任何bins中找到這種chunk。當需要分配一個small chunk,但在small bins中找不到合適的chunk,如果last remainder chunk的大小大于所需要的small chunk大小,last remainder chunk被分裂成兩個chunk,其中一個chunk返回給用戶,另一個chunk變成新的last remainder chunk。
sbrk與mmap
在堆區中, start_brk 指向 heap 的開始,而 brk 指向 heap 的頂部??梢允褂孟到y調用 brk()和 sbrk()來增 加標識 heap 頂部的 brk 值,從而線性的增加分配給用戶的 heap 空間。在使 malloc 之前,brk 的值等于 start_brk,也就是說 heap 大小為 0。
ptmalloc 在開始時,若請求的空間小于 mmap 分配閾值(mmap threshold,默認值為 128KB)時,主分配區會調用 sbrk()增加一塊大小為 (128 KB + chunk_size) align 4KB 的空間作為 heap。非主分配區會調用 mmap 映射一塊大小為 HEAP_MAX_SIZE(32 位系統上默認為 1MB,64 位系統上默認為 64MB)的空間作為 sub-heap。這就是前面所說的 ptmalloc 所維護的分配空間;
當用戶請求內存分配時,首先會在這個區域內找一塊合適的 chunk 給用戶。當用戶釋放了 heap 中的 chunk 時,ptmalloc 又會使用 fastbins 和 bins 來組織空閑 chunk。以備用戶的下一次分配。
若需要分配的 chunk 大小小于 mmap分配閾值,而 heap 空間又不夠,則此時主分配區會通過 sbrk()調用來增加 heap 大小,非主分配區會調用 mmap 映射一塊新的 sub-heap,也就是增加 top chunk 的大小,每次 heap 增加的值都會對齊到 4KB。當用戶的請求超過 mmap 分配閾值,并且主分配區使用 sbrk()分配失敗的時候,或是非主分配區在 top chunk 中不能分配到需要的內存時,ptmalloc 會嘗試使用 mmap()直接映射一塊內存到進程內存空間。使用 mmap()直接映射的 chunk 在釋放時直接解除映射,而不再屬于進程的內存空間。任何對該內存的訪問都會產生段錯誤。而在 heap 中或是 sub-heap 中分配的空間則可能會留在進程內存空間內,還可以再次引用(當然是很危險的)。
內存分配malloc流程
獲取分配區的鎖,防止多線程沖突。
計算出實際需要分配的內存的chunk實際大小。
判斷chunk的大小,如果小于max_fast(64B),則嘗試去fast bins上取適合的chunk,如果有則分配結束。否則,下一步;
判斷chunk大小是否小于512B,如果是,則從small bins上去查找chunk,如果有合適的,則分配結束。否則下一步;
ptmalloc首先會遍歷fast bins中的chunk,將相鄰的chunk進行合并,并鏈接到unsorted bin中然后遍歷 unsorted bins。如果unsorted bins上只有一個chunk并且大于待分配的chunk,則進行切割,并且剩余的chunk繼續扔回unsorted bins;如果unsorted bins上有大小和待分配chunk相等的,則返回,并從unsorted bins刪除;如果unsorted bins中的某一chunk大小 屬于small bins的范圍,則放入small bins的頭部;如果unsorted bins中的某一chunk大小 屬于large bins的范圍,則找到合適的位置放入。若未分配成功,轉入下一步;
從large bins中查找找到合適的chunk之后,然后進行切割,一部分分配給用戶,剩下的放入unsorted bin中。
如果搜索fast bins和bins都沒有找到合適的chunk,那么就需要操作top chunk來進行分配了
當top chunk大小比用戶所請求大小還大的時候,top chunk會分為兩個部分:User chunk(用戶請求大?。┖蚏emainder chunk(剩余大?。F渲蠷emainder chunk成為新的top chunk。
當top chunk大小小于用戶所請求的大小時,top chunk就通過sbrk(main arena)或mmap(thread arena)系統調用來擴容。
到了這一步,說明 top chunk 也不能滿足分配要求,所以,于是就有了兩個選擇: 如 果是主分配區,調用 sbrk(),增加 top chunk 大??;如果是非主分配區,調用 mmap 來分配一個新的 sub-heap,增加 top chunk 大?。换蛘呤褂?mmap()來直接分配。在 這里,需要依靠 chunk 的大小來決定到底使用哪種方法。判斷所需分配的 chunk 大小是否大于等于 mmap 分配閾值,如果是的話,則轉下一步,調用 mmap 分配, 否則跳到第 10 步,增加 top chunk 的大小。
使用 mmap 系統調用為程序的內存空間映射一塊 chunk_size align 4kB 大小的空間。然后將內存指針返回給用戶。
判斷是否為第一次調用 malloc,若是主分配區,則需要進行一次初始化工作,分配 一塊大小為(chunk_size + 128KB) align 4KB 大小的空間作為初始的 heap。若已經初 始化過了,主分配區則調用 sbrk()增加 heap 空間,分主分配區則在 top chunk 中切 割出一個 chunk,使之滿足分配需求,并將內存指針返回給用戶。
簡而言之:獲取分配區(arena)并加鎖–> fast bin –> unsorted bin –> small bin –> large bin –> top chunk –> 擴展堆
內存回收流程
獲取分配區的鎖,保證線程安全。
如果free的是空指針,則返回,什么都不做。
判斷當前chunk是否是mmap映射區域映射的內存,如果是,則直接munmap()釋放這塊內存。前面的已使用chunk的數據結構中,我們可以看到有M來標識是否是mmap映射的內存。
判斷chunk是否與top chunk相鄰,如果相鄰,則直接和top chunk合并(和top chunk相鄰相當于和分配區中的空閑內存塊相鄰)。轉到步驟8
如果chunk的大小大于max_fast(64b),則放入unsorted bin,并且檢查是否有合并,有合并情況并且和top chunk相鄰,則轉到步驟8;沒有合并情況則free。
如果chunk的大小小于 max_fast(64b),則直接放入fast bin,fast bin并沒有改變chunk的狀態。沒有合并情況,則free;有合并情況,轉到步驟7
在fast bin,如果當前chunk的下一個chunk也是空閑的,則將這兩個chunk合并,放入unsorted bin上面。合并后的大小如果大于64B,會觸發進行fast bins的合并操作,fast bins中的chunk將被遍歷,并與相鄰的空閑chunk進行合并,合并后的chunk會被放到unsorted bin中,fast bin會變為空。合并后的chunk和topchunk相鄰,則會合并到topchunk中。轉到步驟8
判斷top chunk的大小是否大于mmap收縮閾值(默認為128KB),如果是的話,對于主分配區,則會試圖歸還top chunk中的一部分給操作系統。free結束。
使用注意事項
為了避免Glibc內存暴增,需要注意:
1. 后分配的內存先釋放,因為ptmalloc收縮內存是從top chunk開始,如果與top chunk相鄰的chunk不能釋放,top chunk以下的chunk都無法釋放。
2. Ptmalloc不適合用于管理長生命周期的內存,特別是持續不定期分配和釋放長生命周期的內存,這將導致ptmalloc內存暴增。
3. 不要關閉 ptmalloc 的 mmap 分配閾值動態調整機制,因為這種機制保證了短生命周期的 內存分配盡量從 ptmalloc 緩存的內存 chunk 中分配,更高效,浪費更少的內存。
4. 多線程分階段執行的程序不適合用ptmalloc,這種程序的內存更適合用內存池管理
5. 盡量減少程序的線程數量和避免頻繁分配/釋放內存。頻繁分配,會導致鎖的競爭,最終導致非主分配區增加,內存碎片增高,并且性能降低。
6. 防止內存泄露,ptmalloc對內存泄露是相當敏感的,根據它的內存收縮機制,如果與top chunk相鄰的那個chunk沒有回收,將導致top chunk一下很多的空閑內存都無法返回給操作系統。
7. 防止程序分配過多的內存,或是由于glibc內存暴增,導致系統內存耗盡,程序因為OOM被系統殺掉。預估程序可以使用的最大物理內存的大小,配置系統的/proc/sys/vm/overcommit_memory ,/proc/sys/vm/overcommit_ratio,以及使用ulimit -v限制程序能使用的虛擬內存的大小,防止程序因OOM被殺死掉。
—— EOF —— 你好,我是飛宇,本碩均于某中流985 CS就讀,先后于百度搜索以及字節跳動電商等部門擔任Linux C/C++后端研發工程師。
同時,我也是知乎博主@韓飛宇,日常分享C/C++、計算機學習經驗、工作體會,歡迎點擊此處查看我以前的學習筆記&經驗&分享的資源。
我組建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起進群交流。
歡迎你添加我的微信,我拉你進技術交流群。此外,我也會經常在微信上分享一些計算機學習經驗以及工作體驗,還有一些內推機會。
加個微信,打開另一扇窗
免責聲明: 該內容由專欄作者授權發布或作者轉載,目的在于傳遞更多信息,并不代表本網贊同其觀點,本站亦不保證或承諾內容真實性等。若內容或圖片侵犯您的權益,請及時聯系本站刪除。侵權投訴聯系:? nick.zong@aspencore.com!評論
導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態脈沖干擾,這類干擾持續極短,卻足以在高速鏈路中引發誤觸發。然而,傳統函數發生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態脈沖提供精細刻畫,配合SPG 文:杜杰編輯:侯煜當地時間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設備——境外生產的先進機器人設備、境外生產的聯網電力逆變器。FCC在官方情況說明書中明確,該類境外制造產品,“會對美國國家安全或美國民眾的人身安全構成無法承受的風險”。本次新規設置明確豁免機制:經美國國防部(DoW)、電力逆變器品類經美國國土安全部(DHS)審核并授予“有條件批準”,認定對應設備品類不存在重大安全風險,即可獲得準入豁免。同時政策嚴格執行新老劃斷原 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態上報。三件事拆開,早先的常規做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就 在前六期中,我們已經分別討論了 CRA 的適用范圍、整體影響、漏洞通報義務、風險評估與技術文檔證據鏈、第三方組件與 SBOM 供應鏈治理,以及產品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業已經能夠回答幾個核心問題:產品是否落入 CRA 適用范圍,產品由哪些組件構成,企業如何證明自己在設計、開發和上市前采取了必要的安全措施,以及產品上市后如何持續維護和安全下線。但對于真正準備落地 CRA 合規的企業來說,還有一個更現實的問題:CRA 的法規條文相對原則化,企業應當如何把“網絡安 摘要在防爆電氣設計中,只參照芯數選型而忽略額定載流量,長期滿負荷運行會出現插頭發熱、接觸面氧化、IP67 密封受熱老化等問題。結合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數對照表,區分冷壓免焊接、焊接兩種接線結構的安全載流數值,設置合理電流冗余系數,搭配使用環境修正參數,規范防爆接近開關連接器、防爆法蘭插座的選型計算方式。關鍵詞圓形防爆連接器,載流參數表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產品概述圓形防爆連接器觸點載流能力由插針直徑、   產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環路、TL431 精密恒壓反饋環路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節點電位;該節點直 很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步, ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及??扇缃?,回頭再看,那種 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發式的增長窗口。在這一關鍵節點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規格上的底層創新,成功打破了“高性能必高功耗”的傳統魔咒,為行業提供了極具競爭力的連接最優解。核心技術優勢:重塑Cat.1能效與連接標桿海主站蜘蛛池模板: 顿悟的意思| 韩国电影丰满的少妇| 男篮亚锦赛2015| 密桃成熟时下载| 图书馆的女朋友免费动漫高清电视剧动漫第五集无广告 | 音乐奇侠动画片全集| 我和保姆的色情片| 武则天艳情三级DVD版第一部| 金花瓶1999| 敏敏跳舞| 高跟鞋smvk| 偷窥无罪吴彦祖电影全集| XL司令第二季真人版全集免| 老爸上战场| 超级cosplay大战| 佐卡伊旗舰店| 老男孩在线观看| 北越暴行全集无删减| 电影《异常》完整版观看免费 | 西瓜烂了是什么梗| 电影千金小姐赤子板栗免费观看| 民国往事| 狂飙在线全集免费观看| 女超人满天星麦乐迪| 痴人之爱电影在线观看| 昭和系列电影免费观看大全| 百日郎君| 《越南女兵满天星》电影免费观看| 变态的情人| 苹果2007年电视剧免费观看| 雷神4在线观看完整免费高清电影| 性极强的岳让我满足的导演| 无颜之月免费观看| 致郁生日| 外姓兄弟| 理想之城全集| 369你懂的电影永久入口| 警察故事3电影| 美丽的小蜜桃5| 仙武传在线免费观看| 禁忌4年转一代禁忌| 斗破苍穹电视剧在线观看| 炫动潮流夜| 《哪吒1》免费完整版| 泷泽萝拉在线观看| 韩国A片巜善良的秘书的目的| 买车| 怪盗基德特别篇全集| 黑暗侵袭1高清| 花房姑娘免费播放大全电视剧| 光环美剧| 奥特银河格斗3第一集在线观看| 入室暴行| 电视剧孽债全集免费播放| 我的妻子韩剧电视剧免费观看| 本能 电影| 抗战奇侠2| 《粉红大白菜》钟楚红| 斗罗大陆148集| 维修工的艳遇在线| 仁心解码第一部| 女娲传奇之灵珠| 慈禧太后秘密生活| 午夜福利在线观看6080| 欧式少女第16集全集剧情介绍视频 | 龙门镖局11| 哪里能看一路向西| 白嫖者联盟免费观看高清版| 影子爱人电影| 法国空乘08| 电影原始武器| 混血的摇篮曲在线播放| 联姻五年后她重生了短剧免费全集| 义姐是不是良妈妈动漫第集在线看全| 灌篮高手连载| 便利店少女2高清版| 相门嫡女全集免费| 出差妻子对客户社长的招待| 千王之王免费观看全集| 伦理《生殖按摩》| 夺帅电影| 二手4500| 流星花园新版| 麦乐迪满天星电影| 武打电影免费观看高清完整| 那小子不可爱电视剧| 僵尸100| 17·3电影免费观看高清| 影音先锋男人资源813| 舒服吗我厉不厉害| 电击小子3季| 青青草在9线观看| 法国空姐11完整版第一部 | 八戒八戒免费高清完整版| 麦乐迪马克斯满天星电影免费播放| 电影长津湖完整版播放| 长沙电视台政法频道| 星克莱尔全集在线| 弹钢琴的盲童| 四平青年之喋血曼谷免费观看完整| 金银梅韩国版| 安康市| 月半爱丽丝电视剧免费观看完整版| 《与我同眠》电影| 97电视剧在线播放免费观看| 下一个台风| 妖精的尾巴51| 《外卖奇遇记》周香允| 小鱼影剧| 只有妈妈好| 水手服饲养未减版主演是谁| 两个妻子剧情介绍| 大胸姐姐3| 我唾弃你的坟墓1| 黑道公子2| 冬之蝉下载| 同闯歌坛| 电影贝拉1980在线观看| 火云传奇| 两个好媳妇中文在线观看| 《寒武纪》| 新醉打金枝电视剧| 韩剧《下属的妻子》主演名单表| 爱逢时短剧免费播放| 麻美ゆま| 邻家姐姐的味道| 宅宅萝卜| 黑白配电影高清在线观看!| 神隐电视剧1-40集免费看| 无人区高清完整版免费观看电影| 越南女兵满天星2023年上映时间 | 幸福最晴天 电视剧| 斗气冤家好兄弟第二部| 农场主三姐妹2保罗| 冲上云霄2大结局是什么| 漂亮的妈妈7中字开头7个字!| 我的人间烟火电视剧免费观看杨洋| 手工制作丝网花| 我的巨乳妹妹3在线观看| 秘密花园免费版| 国号 百家讲坛| 非诚勿扰20121216| 青梅竹马是消防员第一季完整版未打吗robl | 彼得格里尔的贤者时间第一季| 日本电影人证| 哇嘎视频在线免费观看| 云之羽免费观看全集电视剧| 李采潭的电影全集在线观看 | 《女生规则:禁爱游戏》| 电视剧神话免费观看完整版| 商务旅行戴绿帽在线观看| 大悲寺苦行僧| 张雨筱人体| XL司令第二季无马赛第八集免费观看| 微微一笑很倾城剧情介绍| 高楞青年| 血战到底全集| 男女一起愁愁愁免费网站| 长安的荔枝免费播放| 女朋友的闺蜜韩国电影| 晚安为我而我的妹妹| 无人区电影高清免费| 机械女仆| 完美妻子满天星在线观看免费高清| 《课外辅导女教师》电视剧| 芈月传全集在线观看| 好玩还得是瘦子全集免费播放在线观看| 新上门女婿手机免费观看| 兽魂觉醒动漫免费观看高清 | 渣男退散短剧全集| 猎犬 第二季| 韩国电影被水电工诱奸免费观看| 西施成人版| 千金与佣人日剧电影免费观看| 刀郎厦门演唱会| 浴火之路演员表| 姐妹在线观看完整版免费| 春雨全集在线观看免费| 女人荫蒂被添全过程A| 日版情定大饭店| 新加坡战争2011很差导演:彭禺厶主演:金九拉 金利娜 李硕薰 GREE简介:主角Sara | 更好的生活| 强伦轩办公室女教师HD| 传闻中的七公主剧情介绍| 单数绝配| 人狗大战8集全集观看免费西瓜 | 小公主苏菲亚第四季免费观看| 安姨《房屋售楼员》电影| 苏炳添说对不起大家| 换伴| 再生缘电视剧| 法国电影《女超人》麦乐迪免费观看| 煎饼侠电影完整版| 乌龙小子动画片全集| 1986牙医姐妹完整版| 姨母辅导高清版| 上门推销内衣女销售员2在线播放 美味快递员特殊待遇2在线观看免费高清 | 白峰电影高清免费观看平台| 我们的少女时代| 爱唯侦查dvd| 美人图秋瓷炫被搓奶第几分钟 | 酒店免费观看完整版高清| 火云传奇| 《维修工的绝遇》2视频| 狙击手电影免费观看完整版| 《女儿们的男朋友》评分| 武林女大生| 麦乐迪女超人满天星免费观看完整版| 毒液2电影免费版在线观看| 硬汉枪神在线观看| 女战狼6在线高清免费观看| 神印王座免费完整观看| 法国空乘5免费高清原声满天星| 女人生殖下面欣赏SAWW性| 宦海奇官| 按摩女技师| 猫眼看天下| 二次元胸像气球越来越大的视频| 成都警方通报天府二街伤害案| 《渔夫的荒野史记》在线观看免费中 | 除却巫山邓家佳DVD版| 彩翼儿童美术| HR版女版壮志凌云2010 | 借种无删减| 千金复仇:仇人覆灭全集免费| 米奇妙妙屋英语版动漫| 雯迪vlog| 五十度灰在线观看如如影视| 隐身冒| 童颜不老三公主| 外卖特邀员免费| 维珍朋克:发条女孩| 《男按摩师做乳房按摩》在线观看视| 《塔蒂亞娜2》完整版| 我需要爸爸的种子在线观看| 勇往直前20100516| 日本男按摩师影院| 狙击蝴蝶电视剧全集| 圣特罗佩姑娘们完整版在线观看| 卫生队的故事电视剧免费观看 | 非杀人小说| 央视网评全面禁止老头乐| 360大佬爱上我第二季观看| 转生成蜘蛛又怎样23集在线观看 | 电影卖春| 妈妈的职业5高清完整版| 领袖电视剧| 闺蜜的秘密| 荣誉守则满天星免费观看高清版| 真相电视剧在线观看完整版| 星空在线观看免费| 许凯新剧《子夜归》| 私人航空免费观看完| 迷失情感| 后母动漫全集第三季| tobu4免费 | 无处藏身全集电视剧免费观看| 高清棒球大联盟未删减| 50岁寡妇下面水多好紧| 《地爆天星小姐》电影| 加利福尼亚山谷女孩们| 男按摩师做乳房按摩电影中文| 红苹果免费追剧| 墨西哥10.5级地震| 魔镜号中文在线观看| 杨沫的作品| 三更车库在线观看| 电影《第八日》凯登克罗斯| 苍蝇之母全集观看| 全职高手第二季第八集| 女帝谋全集免费| 战狼10免费完整高清版在线播放电影 | 贞观长歌高清| 将军夫人全集免费| 韩剧《装修去闺蜜家》 | 缉枪 电影免费观看完整| 花与蛇之贵夫人| 巜交换邻居女朋友4| 外来从业人员综合保险查询| 禁忌2年一代禁忌| 咖喱辣椒电影| 长月烬明电视剧全集| 怒潮在线观看完整普通话2023| 《疯狂姐妹花》短剧| 璀璨人生第一集| 和讨厌的部长一起去出差旅的电影叫什么 | 黑白配免费观看高清播放| 湖北卫视综合频道| 善良的岳母娘| 黑人大鸡巴大战俄罗斯美女| 大力女子都奉顺| 报价| 八佰高清免费完整电影在线观看| ova夕颜动漫在线观看| 法国少女农场2中文版在线观看| 义子的无理侵犯在线观看 | 广场舞纳西情歌背面| 家族荣誉4| 一个人看的日本在线观看| 折腰电视剧免费观看完整版| jizz日本18| 电视剧尖峰全集观看| 人民的名义55集免费完整版| 死生时刻| 烈火情挑| 摩登家庭第二季下载| 免费观看50分钟高清电视| 三年成全免费观看在线高清| 炫迪传奇全集播放| 《楚乔传2:冰湖重生》| 男女一起愁愁免费观看电视剧第8集| 叶子楣经典电影《聊斋》| 斯戴佛的妻子们| 济公游记| 电影爱我几何| 蜂脸女人| 死亡使者 电视剧| 《xl司令》第一季| 咒术尸战电影在线观看| 扎职3义薄云天在线观看国语| 还珠格格| 丰乳肥臀16部合集| 妖精的尾巴高清版| 玻璃情缘| 金瓶梅在线观看免费版电影| 哇嘎免费观看在线播放高清| 傻儿军长| 新员工入职秘书2| 红罂粟电视剧| 德州电锯杀人狂1| 暴躁老姐免费观看40集电视剧| 黄河大侠电影| 站着再来一次第6集全集观看 | 姐姐真漂亮3高清在线播放| 新员工入职秘书| 漠风吟电视剧在线观看完整版免费 | 娃娃脸4| 电视剧孔雀翎| 肚子抽脂多少钱| 乘龙怪婿第一季粤语版在线观看| 别墅轮换4攻略免费观看电视剧| 大陆年轻帅小伙飞机GAY| 胜利事件牵扯明星| 妈妈的职业5完整版结局在线看免费 | 电视剧大唐荣耀60集免费观看| 单身即地狱综艺在线观看第四期| 韩国秋瓷炫,生死决断完整版 | 电视剧红颜的岁月| 女超人法国电影完整版| 总裁有疾闪婚来袭短剧免费观看| 内蒙古高考状元| 男女愁愁免费看| 禁忌的边界线| 小爸爸电视剧插曲| 凌云壮志女版(法国)| 佳恩别哭国语版| 绝命凯特| 霍元甲电视连续剧| 侯玉洁牧师讲道的全部视频| 超越情感| 大地8中文在线观看免费高清成全| 玩具总动员1| 《水润人生》2刘智贤| 午夜情缘| 青春守艺人在哪里播出| 康德第一保镖传奇插曲| 图书馆里的女友动漫1-6集全集免费观 | 斗罗大陆全集免费观看完整版动漫| 花房姑娘第三季剧情介绍| 高清《飞驰人生2》在线观看地址| 原始生活21天第二季| 佳恩别哭国语版| 寒武纪免费观看在线观看完整版 | 电视连续剧锅哥警察| 美国版《丛林女超人》| 白衣女超人满天星版| 妈妈的星星号| 射雕英雄传 胡歌| 激战后厨1至5外出| 紧扣的星星动漫| 《天星术》免费| 弓在线观看| 妈妈愿意让你c| 《误杀3》电影超清免费观看星辰 小萍的性荡生活第24集 | 《需要爸爸播种美国》演员中文名 | 伊波拉2病毒完整国语版免费| 刘浩存新剧七根心简| 西游记大闹天宫电影| 我的40岁大胸继拇| 韩国仙女屋| 色即是空qvod| 炼气十万年动漫全集免费观看| 《overflower》动漫全集免费!| 联手复仇虐渣:双胞胎姐妹全集免费| 再生缘电视剧| 《禁忌》1980无删减在线观看| 金银梅1-5手机版普通话| 秀才是怎么火起来的 | 头脑特工队电影免费观看中文版| 水润女人在线观看电视剧免费 | 绝地引爆| 电影卖房女销售的电影叫什么| 大风歌全集| 凯·帕克《囚禁》| 特聘外卖员| 与玛格丽特的午后| 选择全对:神级人生全集免费| 掌中之物未删减完整版| 脱逃天海冀在线观看免费| 美女午夜福利4K视频在线观看| 妻子6免费完整高清中文版电视剧欢迎光临 | 新警事电视剧| 张警官免费完整版在线观看| 黑道老大和我的365天| 黑鹰坠落国语| 向井蓝在线观看| 黄yyid频道| 强奸蓝洁瑛的是谁| 你懂的369| 楚汉传奇 下载| 青春正能量之我是女神| 骗骗喜欢你电影在线观看免费 | 新来的女教师| 纵有疾风起免费观看全集| 《麦乐迪和父亲》完整版百度云| 性的爆行| 警方通报男子挤压幼儿肚子| 我的丑娘剧情介绍| 电影斗牛下载| 正在播放: 解决学生的性爱烦恼不穿内衣裤的美波老师硬硬教学 波汐里 中文本幕 | 斗破苍穹107集免费观看| 熊出没·伴我“熊芯”免费| 星期三第二季在线看免费观看| 法国空姐2019满天星法版:星辉照耀中字| 奈奈与薫的sm日记| 武汉十七中事件| 电影《孟良崮》| 法国空乘5满天星观看| 金锁记电影| 奥特曼八兄弟国语版| 斑马视频电影完整版在线观看| 司令XL第一季真人版| 甄嬛传74集| 侯玉洁2017年讲道视频| 为有暗香来电视剧| 月上朝颜电视剧免费观看完整版| 毒医嫡女:下毒医术超精通全集免费 | 画皮3在线观看完整版| 《爱丈夫更深爱着公》主演| 美女在线观看完整免费高清原声满天星| 聊斋艳谭艳梅在线观看| 长歌行电视剧在线观看免费| 全开女孩2| 监控人1到100集免费看| 坎贝奇品味人生免费观看| 让子弹飞电影完整| 绑架封嘴| 苍兰诀动漫在线观看完整版| 黑白配中文全集在线播放| 你微信时很美电视剧免费观看| 苍空电影完整版在线观看| 慈禧秘密生活高清完整国语电影| 禁忌5未删减版| 142分钟颐和园未删除版本| 铁拳无敌孙中山| 泡芙小姐的金鱼缸| 高压监狱2019满天星法版免费| 藏獒多吉全集| 特朗普与哈里斯首辩倒计时| 美容室.特除服务3| 性解密大牛| 樱桃电影在线免费观看| 黑雾电视剧免费观看完整版| 《我的老师中字ID》完整版| 金银梅5一10普通话免费观看| 电影《美容院的特殊待遇》5纹身女演 | 危险关系免费观看完整版| 《卖百科全书的女人》(2000年,法国)| 两个人的世界在线观看| 花田喜事2010粤语版| 反击电视剧全集在线观看| 日本电影特殊治疗的医护| 森奈奈子伦理片免费在线观看| 杨思梅敏金瓶完整国语| 他是谁电视剧免费观看完整版国语| 清水河县| 色情时空| 韩国电影绿色椅子| 恨锁金瓶电视剧全集免费观看完整版| 当我飞奔向你在线观看| 日剧大度免费观看完整版高清| 厨王电视剧| 美妙旋律-第2季| 高清《戴拿奥特曼》免费观看| 丰满的继牳5伦A片在线播放| 外国孩子中国爸| 男艺妓回忆录| 妖不起66| 法国空乘5免费在线观看| 如果声音有记忆免费观看完整版| 新白发魔女| 《法国空乘5:满天星》| 寄生兽生命的准则| 马腾你别走未删减| 热力四射2下载| 英雄崛起百度影音| 四个妇女精油按摩记| 尼古拉斯尼克贝| 张志新子女| 美国式禁忌5原始的爱| 坎贝奇品味人生完整的| 骑呢大状粤语全集免费观看| 光头强的妈妈是谁| 《热血青春》凯帕克| 河南省| 麦乐迪女超人免费在线观看| 盛夏晚晴天大结局| 勇者王粤语| 女孩阿尔玛| 伦理《法国护士长》2006在线播放| 门当户对相亲节目| 借种在线观看| 大唐女巡案| 永安市| 壮志凌云满天星在线观看完整免费高清英文叫什么 | 肉蔻之香| 冢本监督昭和系列越南女子在线观看完整版| 风筝电视剧免费观看| 同德县| 百变机兽之元气星魂| 李桢航资料| 我的妻子韩剧| 混血的摇篮曲1973正版播放| 寒门弃少:靠医术震彻京城短剧全集| 地下婴儿乐队| 我的错误在线观看高清| 郝板栗《千金小姐》免费观看| 1995版泰山救珍妮| 帝王计划:怪兽遗产| 银魂188| 香草的天空| 公之浮手中字8| 值头发多少钱| 猎罪图鉴电视剧全集免费观看| 当头炮的走法| 高清《斛珠夫人》免费观看| 罗曼史qvod| 光剑变装14分16秒百度云| 妈妈的职业免费完整版在线观看 | 还珠格格电视剧全集免费观看 | 成都4P雪梨枪在线免费看| 灵与肉台湾| 热情的邻居| 豪门盛宴背景音乐| 需要爸爸种子电影| 傻瓜妈妈插曲| 来了来了终于来了| 《玉女心经3:阴阳和合》免费舒淇电影完整版 | 辽宁省| 新人类之毒医肥尸| 睡在我上铺| 不扣纽扣的女孩qvod| 泰国一级特色黄一片| 《瓜达卢佩的玫瑰》完整版在线观看 | 人间中毒完整版求| 肉蒄之香| 如懿传高清免费全集在线观看| 乡下 乱 仑| 杀戮之王电影在线观看| 法国版《女超人:麦乐迪》完整版| 与小仙女混居的日子| 因爱富有| 特殊的游泳教练在线观看| 盗梦空间qvod| 阿加莎·克里斯蒂之七面钟电视剧 | 爸爸想要播种子| 许我耀眼16集| 启示录在线观看免费完整版高清| ed2k 学生| 西班牙掌中之物完整版免费观看| 埃及与长赐号船东达成和解| 别和陌生人跳舞全集| 夜光神杯全集| 凯登克罗斯主演作品在线播放| 欢乐喜剧人第三期完整版| 命运 电视剧| 小沈阳唱的歌| 男按摩师做乳房电影| 变形金刚2 720| 高清《我家那小子2026》| 雷霆扫毒粤语百度影音| 电影无删减电影| 富婆三姐妹免费播放电视剧| 主君的太阳| 美式禁忌3| 高清沧元图3| 谁的青春不乱爱| 琉璃川没落贵族第二集完整版| 巜人妻初次按摩忍不住| 女销售的秘密2免费观看| 少年包青天2| 红高粱高清下载| 82版杨敏思版本1-5电视剧免费观看| 龙年档案剧情简介详细| 年轻的母亲4先韩剧| 泰囧完整版| 公主嫁到国语版全集| 黑白配HD1080完整版中文版| 中国人已着手在月球生产水了| 《欲乱上班族》在线观看| 缉恶2024| 普格县| 韩剧美容院特殊待遇| 我要打鬼子全集| 亚当君同类型动画有哪些| 外出3免费观看完整版| 《激战丛林》罗莎卡拉乔洛在线播放| 卢旺达的玫瑰满天星| 上游电视剧免费观看全集| 清宫性史之名妓风流| 泰迪熊之玩具大战 电影| 黑白配电影高清在线观看| 冰河剧集小妈| 部长与秘书出差电影中文字幕| 王者二弟| 有顶天家族| 法国《监狱伦理3》| 灵魂摆渡人1在线观看完整版| 喜爱夜蒲快播观看| 傻王闯天下全集| 麦迪逊女超人| 侵略!乌贼娘| 捉妖战记| 特殊的诊疗室6| 很想很想你| 尖峰时刻2国语版| xl司令在线观看完整版动漫第一季| 年轻的小姨子2中文| 美国电影需要爸爸播种| 三线轮回电影完整版在线观看| 冰湖重生全集观看| 女超人麦乐迪免费在线观看| 刀剑神域国语版全集| 大掌门电视剧全集| 火线警告第一季| 战狼6高清完整免费观看国语下载 聊斋奇谭3之妖女谭2免费观看 | 朱门巧妇| 我的父亲母亲的婚姻 电视剧| 老公刚出门,义子就侵犯电影| 我的妈妈是校花未删减| 鬼剧院之惊青艳女郎| 十二谭电视剧免费观看| 惊天大贼王截取了一段| 直播:女子乒乓球单打决赛| 《激战丛林》-罗莎·卡拉乔洛在线观看 | 老师好在线全集免费观看| 影音先锋男人源资源 | 高压监狱2完整免费高清观看| 扎职粤语高清完整版| 龙虎戏凤| 半熟恋人综艺第三期下在线观看| 家庭老师| 做aj的免费大全电视剧| 伦理《法国护士长》2006免费在线观看 | 无人区高清完整版免费观看电影| 落魄贵族琉璃川在线免费观看| 李焕英免费观看| 乱世佳人电视剧免费观看全集| 战姬绝唱| 年轻的小痍子3免费观看| 亚当君同类型动画有哪些| 男媒婆全集在线观看| 房屋销售电影在线观看完整版 | 《姐妹牙医》免费观| 潜艇总动员| 大唐好男人电视剧| 金瓶梅2下载地址| 丈夫的上司| 美人鱼 1984 电影| 《灰猎犬号》国语版| 年轻人 高清在线观看| 日本空姐| 斗罗大陆153| 卿本佳人在线观看| 换脸明星电影完整版在线观看 | 一颗红豆| 处女夜记| 白峰电影在线观看免费版2023年上映时 | 爱不懂事| 特殊教练游泳| 和讨厌的部长一起出差旅游电影| 萨顶顶快去歌手顶一顶| 看不见的朋友| 斗破苍穹年番大结局| 妻子的秘密免费版电视剧大全| 名侦探柯南vs鲁邦三世| 电影:农场保卫战H版| 勐垅沙免费| 曲沃县| 北上电视剧38集| 我的妻子韩剧电视剧免费观看| 女搜查官免费观看| 妖精的尾巴02| 远远的爱结局| 男生打游戏听出网友病危| 最新泰剧| 姐妹牙医电影在线看完整版高清| 电视剧逍遥免费观看全集| 玉蒲团全集在线观看| 泰剧《与爱同居2》| 我要爸爸种子美国电影完整版| 空姐3完整版免费| 离婚律师 电视剧| 新闺蜜时代23| 公下爱丽丝| 甘洛县| 动漫《侄女开发日记》免费观看完整| 邻居漂亮的妻子5| 年轻女教师5高潮| 诺言郭有才歌曲| 鸭王2在线观看免费观看| 正在播放:黑人巨屌 Karla Kush 金发美女对战大黑鸡巴 - 17 | 同学的母亲中字ID英文| 梦魇绝镇第二季在线观看 | 好想告诉你电影版下载| 美国达人秀第七季总决赛 | 血战钢锯岭完整版| 梦想三国原版电视剧在线观看免费| 《麦乐迪和父亲》完整版百度云| 斗罗大陆动画片| 电视剧纵横四海| 《美丽小蜜桃》1| 公交车在线观看电视剧| 浮之手3| 酒店1-80集免费看全集| 《插曲30分钟在线观看》| 芦笙恋歌简谱| 82版杨敏思版本1-5集免费观看| 煲了半天的肉汤蚂蚁庄园| 无双谱国语| 《风流女管家》电影在线看免费版 | 特邀外卖员2003| 朝阳沟封号| 重生之我能升级最新章节| 人体模特雪雪| 乡下真千金短剧免费观看| 男人和女人一起愁愁愁电视剧观看| 台剧《黛比浪漫女家教2》有几集| 丁丁历险记电影| 尖峰时刻 3| 花朵动漫| 生死门电影| 屠宰呕吐娃娃| 巡回检察组43| 大江大河第3部53| 最新韩国电视剧| 温柔的背后吻戏| 达芬奇女孩启蒙| 一路向西的女主角| 有匪电视剧在线观看全集| 高清《欲燃》完整版观看| 拳击手2满天星在线观看完整版| 百万新娘爱无悔| 扫黑风暴在线观看全集| 白峰在线观看完整| 可是我永远记得| 蜜桃成熟3d 高清版| 三位大学位按摩记角色评价解析| 大兵的寝室线观看兵的寝室| 宫斗小能手:从答应到皇后全集免费| 聊斋画皮全集| 世界之战高清| 丛林武士| 风中的承诺粤语| 异灵灵异 2002国语| 亲爱的妈妈3高清| 坎贝奇《品味人生》在线播放| 落翅女的黄昏| 赖汉的幸福指数全集在线观看| 哈利波特与火焰杯下载| 金银悔5普通话版免费播放| 女友的妈妈字ID| 《黑土无言》电影免费观看| 红字韩国电影完整版百度影音| 大地8中文在线观看免费高清成全| 电影种马猎人在线观看完整版| 公安局长第二部| 19岁大学生真人电视剧第12| 宇宙天魔| 樱桃魔法| 我叫赵甲第电视剧| 男生和女生一起愁愁免费观看全集高清完整版电视剧 | 冷眼看客| 黄曼巴罗伊| 棋魂电视剧在线观看完整免费全集| 天生反骨| 私人航空电影免费观看完整版在线播放 | 男女愁愁高期| 罪恶六芒星| jux-422| 致美丽的你花絮| 秘鲁人向普京求救| 办公室风云在线观看完整版| 莫妮卡《爱我几何》免费版是真演吗| 新金瓶梅第2部| 爱情男女电影免费观看| 那金花和她的女婿电视剧免费观看| 小镇姑娘免费高清观看全集| 操小姨子网| 菠萝菠萝蜜在线免费观看| 越狱第三季全集下载| 铁扇公主肚子疼| 斗罗大陆观看全集免费| 幸福的旅程| 《女生宿舍》2免费观看| 坎贝奇的品味人生完整版| 妈妈的职业在线观看视频| 我是特种兵2| 红海行动电影免费播| 少林七崁| 剑侠电视剧| 高清《鸭王》| 台湾版棘手狂情1982的版权声明| 总统之夜1997满天星版| 爆旋陀螺| 杨思敏1一5集手机版| 薛姨妈hi版红楼梦免费观看| 密室大逃脱第4季| overflew| 电影伦理片高压监狱免费| 看不见影子的少年在线观看| 活人墓2013| 美女午夜福利4K视频在线观看| 欲望校园车永莉完整电影在线看视频| 苹果电影片| 宫锁沉香结局| HD版泰山《激战丛林》中文完整版 | 名侦探柯| 流水迢迢电视剧免费观看完整版 | 老兵插曲| 绿茶妹百度影音| 枣阳市| 正在播放: 【传媒】MDSR0006-2 《小凤新婚》下集-高冷新妻性奴 - 91n | 漂亮的保姆完整版免费观看韩剧 | 女战狼6免费观看高清| 壮志凌云女版(H)| 实习医生格蕾第七季| 年代秀20121207| 大宋北斗司电视剧免费观看| 农场保卫战满天星| 韩国电影美容师特殊待遇|