內存分配函數malloc原理及實現

一起學嵌入式 2023-09-07 07:50

掃描關注一起學嵌入式,一起學習,一起成長

大家好,之前分享過內存拷貝函數 memcpy 原理相關的文章:

內存拷貝函數 memcpy 的原理及實現

今天分享內存分配函數 malloc 原理相關的文章。

搞懂它們背后的原理實現,有助于我們能夠更好地去使用它們


任何一個用過或學過C的人對 malloc 都不會陌生。
大家都知道malloc可以分配一段連續的內存空間,并且在不再使用時可以通過free釋放掉。但是,許多程序員對malloc背后的事情并不熟悉,許多人甚至把malloc當做操作系統所提供的系統調用或C的關鍵字。

實際上,malloc只是C的標準庫中提供的一個普通函數,而且實現malloc的基本思想并不復雜,任何一個對C和操作系統有些許了解的程序員都可以很容易理解。

這篇文章通過實現一個簡單的 malloc 來描述 malloc 背后的機制。當然與現有 C 的標準庫實現(例如glibc)相比,我們實現的 malloc 并不是特別高效,但是這個實現比目前真實的 malloc 實現要簡單很多,因此易于理解。重要的是,這個實現和真實實現在基本原理上是一致的。

這篇文章將首先介紹一些所需的基本知識,如操作系統對進程的內存管理以及相關的系統調用,然后逐步實現一個簡單的malloc。為了簡單起見,這篇文章將只考慮x86_64 體系結構,操作系統為Linux。

1 什么是malloc

在實現malloc之前,先要相對正式地對malloc做一個定義。

根據標準C庫函數的定義,malloc具有如下原型:

void*?malloc(size_t?size);

這個函數要實現的功能是在系統中分配一段連續的可用的內存,具體有如下要求:

  • malloc分配的內存大小至少為size參數所指定的字節數

  • malloc的返回值是一個指針,指向一段可用內存的起始地址

  • 多次調用malloc所分配的地址不能有重疊部分,除非某次malloc所分配的地址被釋放掉

  • malloc應該盡快完成內存分配并返回(不能使用NP-hard[1]的內存分配算法)

  • 實現malloc時應同時實現內存大小調整和內存釋放函數(即realloc和free)

對于malloc更多的說明可以在命令行中鍵入以下命令查看:

man?malloc

2 預備知識

在實現malloc之前,需要先解釋一些Linux系統內存相關的知識。

2.1 Linux內存管理

2.1.1 虛擬內存地址與物理內存地址

為了簡單,現代操作系統在處理內存地址時,普遍采用虛擬內存地址技術。即在匯編程序(或機器語言)層面,當涉及內存地址時,都是使用虛擬內存地址。采用這種技術時,每個進程仿佛自己獨享一片2N字節的內存,其中N是機器位數。例如在64位CPU和64位操作系統下,每個進程的虛擬地址空間為264Byte。

這種虛擬地址空間的作用主要是簡化程序的編寫及方便操作系統對進程間內存的隔離管理,真實中的進程不太可能(也用不到)如此大的內存空間,實際能用到的內存取決于物理內存大小。

由于在機器語言層面都是采用虛擬地址,當實際的機器碼程序涉及到內存操作時,需要根據當前進程運行的實際上下文將虛擬地址轉換為物理內存地址,才能實現對真實內存數據的操作。這個轉換一般由一個叫MMU[2](Memory Management Unit)的硬件完成。詳細講解MMU

2.1.2 頁與地址構成

在現代操作系統中,不論是虛擬內存還是物理內存,都不是以字節為單位進行管理的,而是以頁(Page)為單位。一個內存頁是一段固定大小的連續內存地址的總稱,具體到Linux中,典型的內存頁大小為4096Byte(4K)。

所以內存地址可以分為頁號和頁內偏移量。下面以64位機器,4G物理內存,4K頁大小為例,虛擬內存地址和物理內存地址的組成如下:

上面是虛擬內存地址,下面是物理內存地址。由于頁大小都是4K,所以頁內偏移都是用低12位表示,而剩下的高地址表示頁號。

MMU映射單位并不是字節,而是頁,這個映射通過查一個常駐內存的數據結構頁表[3]來實現。現在計算機具體的內存地址映射比較復雜,為了加快速度會引入一系列緩存和優化,例如TLB[4]等機制。

下面給出一個經過簡化的內存地址翻譯示意圖,雖然經過了簡化,但是基本原理與現代計算機真實的情況是一致的。

2.1.3 內存頁與磁盤頁

我們知道一般將內存看做磁盤的的緩存,有時MMU在工作時,會發現頁表表明某個內存頁不在物理內存中,此時會觸發一個缺頁異常(Page Fault),此時系統會到磁盤中相應的地方將磁盤頁載入到內存中,然后重新執行由于缺頁而失敗的機器指令。關于這部分,因為可以看做對malloc實現是透明的,所以不再詳細講述,有興趣的可以參考《深入理解計算機系統》相關章節。

最后附上一張在維基百科找到的更加符合真實地址翻譯的流程供大家參考,這張圖加入了TLB和缺頁異常的流程(圖片來源頁[5])。


2.2 Linux進程級內存管理

2.2.1 內存排布

明白了虛擬內存和物理內存的關系及相關的映射機制,下面看一下具體在一個進程內是如何排布內存的。

以Linux 64位系統為例。理論上,64bit內存地址可用空間為0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF,這是個相當龐大的空間,Linux實際上只用了其中一小部分(256T)。

根據Linux內核相關文檔[6]描述,Linux64位操作系統僅使用低47位,高17位做擴展(只能是全0或全1)。所以,實際用到的地址為空間為0x0000000000000000 ~ 0x00007FFFFFFFFFFF和0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFF,其中前面為用戶空間(User Space),后者為內核空間(Kernel Space)。圖示如下:

對用戶來說,主要關注的空間是User Space。將User Space放大后,可以看到里面主要分為如下幾段:

  • Code:這是整個用戶空間的最低地址部分,存放的是指令(也就是程序所編譯成的可執行機器碼)
  • Data:這里存放的是初始化過的全局變量
  • BSS:這里存放的是未初始化的全局變量
  • Heap:堆,這是我們本文重點關注的地方,堆自低地址向高地址增長,后面要講到的brk相關的系統調用就是從這里分配內存
  • Mapping Area:這里是與mmap系統調用相關的區域。大多數實際的malloc實現會考慮通過mmap分配較大塊的內存區域,本文不討論這種情況。這個區域自高地址向低地址增長
  • Stack:這是棧區域,自高地址向低地址增長

下面我們主要關注Heap區域的操作。對整個Linux內存排布有興趣的同學可以參考其它資料。

2.2.2 Heap內存模型

一般來說,malloc所申請的內存主要從Heap區域分配(本文不考慮通過mmap申請大塊內存的情況)。

由上文知道,進程所面對的虛擬內存地址空間,只有按頁映射到物理內存地址,才能真正使用。受物理存儲容量限制,整個堆虛擬內存空間不可能全部映射到實際的物理內存。Linux對堆的管理示意如下:

Linux維護一個break指針,這個指針指向堆空間的某個地址。從堆起始地址到break之間的地址空間為映射好的,可以供進程訪問;而從break往上,是未映射的地址空間,如果訪問這段空間則程序會報錯。

2.2.3 brk與sbrk

由上文知道,要增加一個進程實際的可用堆大小,就需要將break指針向高地址移動。Linux通過brk和sbrk系統調用操作break指針。兩個系統調用的原型如下:

int?brk(void?*addr);
void?*sbrk(intptr_t?increment);

brk將break指針直接設置為某個地址,而sbrk將break從當前位置移動increment所指定的增量。brk在執行成功時返回0,否則返回-1并設置errno為ENOMEM;sbrk成功時返回break移動之前所指向的地址,否則返回(void *)-1。

一個小技巧是,如果將increment設置為0,則可以獲得當前break的地址。

另外需要注意的是,由于Linux是按頁進行內存映射的,所以如果break被設置為沒有按頁大小對齊,則系統實際上會在最后映射一個完整的頁,從而實際已映射的內存空間比break指向的地方要大一些。但是使用break之后的地址是很危險的(盡管也許break之后確實有一小塊可用內存地址)。

2.2.4 資源限制與rlimit

系統對每一個進程所分配的資源不是無限的,包括可映射的內存空間,因此每個進程有一個rlimit表示當前進程可用的資源上限。

這個限制可以通過getrlimit系統調用得到,下面代碼獲取當前進程虛擬內存空間的rlimit:

int?main()?{
struct?rlimit?*limit?=?(struct?rlimit?*)malloc(sizeof(struct?rlimit));
getrlimit(RLIMIT_AS,?limit);
printf("soft?limit:?%ld,?hard?limit:?%ld\n",?limit->rlim_cur,?limit->rlim_max);
}

其中rlimit是一個結構體:

struct?rlimit?{
rlim_t?rlim_cur;?/*?Soft?limit?*/
rlim_t?rlim_max;?/*?Hard?limit?(ceiling?for?rlim_cur)?*/
};

每種資源有軟限制和硬限制,并且可以通過setrlimit對rlimit進行有條件設置。其中硬限制作為軟限制的上限,非特權進程只能設置軟限制,且不能超過硬限制。

3 實現malloc

3.1 玩具實現

在正式開始討論malloc的實現前,我們可以利用上述知識實現一個簡單但幾乎沒法用于真實的玩具malloc,權當對上面知識的復習:

/*?一個玩具malloc?*/
#include?
#include?
void?*malloc(size_t?size)
{
void?*p;
p?=?sbrk(0);
if?(sbrk(size)?==?(void?*)-1)
return?NULL;
return?p;
}

這個malloc每次都在當前break的基礎上增加size所指定的字節數,并將之前break的地址返回。這個malloc由于對所分配的內存缺乏記錄,不便于內存釋放,所以無法用于真實場景。

3.2 正式實現

下面嚴肅點討論malloc的實現方案。

3.2.1 數據結構

首先我們要確定所采用的數據結構。一個簡單可行方案是將堆內存空間以塊(Block)的形式組織起來,每個塊由meta區和數據區組成,meta區記錄數據塊的元信息(數據區大小、空閑標志位、指針等等),數據區是真實分配的內存區域,并且數據區的第一個字節地址即為malloc返回的地址。

可以用如下結構體定義一個block:

typedef?struct?s_block?*t_block;
struct?s_block?{
size_t?size;?/*?數據區大小?*/
t_block?next;?/*?指向下個塊的指針?*/
int?free;?/*?是否是空閑塊?*/
int?padding;?/*?填充4字節,保證meta塊長度為8的倍數?*/
char?data[1]?/*?這是一個虛擬字段,表示數據塊的第一個字節,長度不應計入meta?*/
};

由于我們只考慮64位機器,為了方便,我們在結構體最后填充一個int,使得結構體本身的長度為8的倍數,以便內存對齊。示意圖如下:

3.2.2 尋找合適的block

現在考慮如何在block鏈中查找合適的block。一般來說有兩種查找算法:

  • First fit:從頭開始,使用第一個數據區大小大于要求size的塊所謂此次分配的塊
  • Best fit:從頭開始,遍歷所有塊,使用數據區大小大于size且差值最小的塊作為此次分配的塊

兩種方法各有千秋,best fit具有較高的內存使用率(payload較高),而first fit具有更好的運行效率。這里我們采用first fit算法。

/*?First?fit?*/
t_block?find_block(t_block?*last,?size_t?size)?{
t_block?b?=?first_block;
while(b?&&?!(b->free?&&?b->size?>=?size))?{
*last?=?b;
b?=?b->next;
}
return?b;
}

find_block從frist_block開始,查找第一個符合要求的block并返回block起始地址,如果找不到這返回NULL。

這里在遍歷時會更新一個叫last的指針,這個指針始終指向當前遍歷的block。這是為了如果找不到合適的block而開辟新block使用的,具體會在接下來的一節用到。

3.2.3 開辟新的block

如果現有block都不能滿足size的要求,則需要在鏈表最后開辟一個新的block。這里關鍵是如何只使用sbrk創建一個struct:

#define?BLOCK_SIZE?24?/*?由于存在虛擬的data字段,sizeof不能正確計算meta長度,這里手工設置?*/
?
t_block?extend_heap(t_block?last,?size_t?s)?{
t_block?b;
b?=?sbrk(0);
if(sbrk(BLOCK_SIZE?+?s)?==?(void?*)-1)
return?NULL;
b->size?=?s;
b->next?=?NULL;
if(last)
last->next?=?b;
b->free?=?0;
return?b;
}

3.2.4 分裂block

First fit有一個比較致命的缺點,就是可能會讓很小的size占據很大的一塊block,此時,為了提高payload,應該在剩余數據區足夠大的情況下,將其分裂為一個新的block,示意如下:

實現代碼:

void?split_block(t_block?b,?size_t?s)?{
t_block?new;
new?=?b->data?+?s;
new->size?=?b->size?-?s?-?BLOCK_SIZE?;
new->next?=?b->next;
new->free?=?1;
b->size?=?s;
b->next?=?new;
}

3.2.5 malloc的實現

有了上面的代碼,我們可以利用它們整合成一個簡單但初步可用的malloc。注意首先我們要定義個block鏈表的頭first_block,初始化為NULL;另外,我們需要剩余空間至少有BLOCK_SIZE + 8才執行分裂操作。

由于我們希望malloc分配的數據區是按8字節對齊,所以在size不為8的倍數時,我們需要將size調整為大于size的最小的8的倍數:

size_t?align8(size_t?s)?{
if(s?&?0x7?==?0)
return?s;
return?((s?>>?3)?+?1)?<}
#define?BLOCK_SIZE?24
void?*first_block=NULL;
?
/*?other?functions...?*/
?
void?*malloc(size_t?size)?{
t_block?b,?last;
size_t?s;
/*?對齊地址?*/
s?=?align8(size);
if(first_block)?{
/*?查找合適的block?*/
last?=?first_block;
b?=?find_block(&last,?s);
if(b)?{
/*?如果可以,則分裂?*/
if?((b->size?-?s)?>=?(?BLOCK_SIZE?+?8))
split_block(b,?s);
b->free?=?0;
}?else?{
/*?沒有合適的block,開辟一個新的?*/
b?=?extend_heap(last,?s);
if(!b)
return?NULL;
}
}?else?{
b?=?extend_heap(NULL,?s);
if(!b)
return?NULL;
first_block?=?b;
}
return?b->data;
}

3.2.6 calloc的實現

有了malloc,實現calloc只要兩步:

  1. malloc一段內存
  2. 將數據區內容置為0

由于我們的數據區是按8字節對齊的,所以為了提高效率,我們可以每8字節一組置0,而不是一個一個字節設置。我們可以通過新建一個size_t指針,將內存區域強制看做size_t類型來實現。

void?*calloc(size_t?number,?size_t?size)?{
size_t?*new;
size_t?s8,?i;
new?=?malloc(number?*?size);
if(new)?{
s8?=?align8(number?*?size)?>>?3;
for(i?=?0;?i?new[i]?=?0;
}
return?new;
}

3.2.7 free的實現

free的實現并不像看上去那么簡單,這里我們要解決兩個關鍵問題:

  1. 如何驗證所傳入的地址是有效地址,即確實是通過malloc方式分配的數據區首地址
  2. 如何解決碎片問題

首先我們要保證傳入free的地址是有效的,這個有效包括兩方面:

  • 地址應該在之前malloc所分配的區域內,即在first_block和當前break指針范圍內
  • 這個地址確實是之前通過我們自己的malloc分配的

第一個問題比較好解決,只要進行地址比較就可以了,關鍵是第二個問題。

這里有兩種解決方案:一是在結構體內埋一個magic number字段,free之前通過相對偏移檢查特定位置的值是否為我們設置的magic number,另一種方法是在結構體內增加一個magic pointer,這個指針指向數據區的第一個字節(也就是在合法時free時傳入的地址),我們在free前檢查magic pointer是否指向參數所指地址。這里我們采用第二種方案:

首先我們在結構體中增加magic pointer(同時要修改BLOCK_SIZE):

typedef?struct?s_block?*t_block;
struct?s_block?{
size_t?size;?/*?數據區大小?*/
t_block?next;?/*?指向下個塊的指針?*/
int?free;?/*?是否是空閑塊?*/
int?padding;?/*?填充4字節,保證meta塊長度為8的倍數?*/
void?*ptr;?/*?Magic?pointer,指向data?*/
char?data[1]?/*?這是一個虛擬字段,表示數據塊的第一個字節,長度不應計入meta?*/
};

然后我們定義檢查地址合法性的函數:

t_block?get_block(void?*p)?{
char?*tmp;
tmp?=?p;
return?(p?=?tmp?-=?BLOCK_SIZE);
}
?
int?valid_addr(void?*p)?{
if(first_block)?{
if(p?>?first_block?&&?p?return?p?==?(get_block(p))->ptr;
}
}
return?0;
}

當多次malloc和free后,整個內存池可能會產生很多碎片block,這些block很小,經常無法使用,甚至出現許多碎片連在一起,雖然總體能滿足malloc要求,但是由于分割成了多個小block而無法fit,這就是碎片問題。

一個簡單的解決方式是當free某個block時,如果發現它相鄰的block也是free的,則將block和相鄰block合并。為了滿足這個實現,需要將s_block改為雙向鏈表。

修改后的block結構如下:

typedef?struct?s_block?*t_block;
struct?s_block?{
size_t?size;?/*?數據區大小?*/
t_block?prev;?/*?指向上個塊的指針?*/
t_block?next;?/*?指向下個塊的指針?*/
int?free;?/*?是否是空閑塊?*/
int?padding;?/*?填充4字節,保證meta塊長度為8的倍數?*/
void?*ptr;?/*?Magic?pointer,指向data?*/
char?data[1]?/*?這是一個虛擬字段,表示數據塊的第一個字節,長度不應計入meta?*/
};

合并方法如下:

t_block?fusion(t_block?b)?{
if?(b->next?&&?b->next->free)?{
b->size?+=?BLOCK_SIZE?+?b->next->size;
b->next?=?b->next->next;
if(b->next)
b->next->prev?=?b;
}
return?b;
}

有了上述方法,free的實現思路就比較清晰了:首先檢查參數地址的合法性,如果不合法則不做任何事;否則,將此block的free標為1,并且在可以的情況下與后面的block進行合并。

如果當前是最后一個block,則回退break指針釋放進程內存,如果當前block是最后一個block,則回退break指針并設置first_block為NULL。實現如下:

void?free(void?*p)?{
t_block?b;
if(valid_addr(p))?{
b?=?get_block(p);
b->free?=?1;
if(b->prev?&&?b->prev->free)
b?=?fusion(b->prev);
if(b->next)
fusion(b);
else?{
if(b->prev)
b->prev->prev?=?NULL;
else
first_block?=?NULL;
brk(b);
}
}
}

3.2.8 realloc的實現

為了實現realloc,我們首先要實現一個內存復制方法。如同calloc一樣,為了效率,我們以8字節為單位進行復制:

void?copy_block(t_block?src,?t_block?dst)?{
size_t?*sdata,?*ddata;
size_t?i;
sdata?=?src->ptr;
ddata?=?dst->ptr;
for(i?=?0;?(i?*?8)?size?&&?(i?*?8)?size;?i++)
ddata[i]?=?sdata[i];
}

然后我們開始實現realloc。一個簡單(但是低效)的方法是malloc一段內存,然后將數據復制過去。但是我們可以做得更高效,具體可以考慮以下幾個方面:

  • 如果當前block的數據區大于等于realloc所要求的size,則不做任何操作
  • 如果新的size變小了,考慮split
  • 如果當前block的數據區不能滿足size,但是其后繼block是free的,并且合并后可以滿足,則考慮做合并

下面是realloc的實現:

void?*realloc(void?*p,?size_t?size)?{
size_t?s;
t_block?b,?new;
void?*newp;
if?(!p)
/*?根據標準庫文檔,當p傳入NULL時,相當于調用malloc?*/
return?malloc(size);
if(valid_addr(p))?{
s?=?align8(size);
b?=?get_block(p);
if(b->size?>=?s)?{
if(b->size?-?s?>=?(BLOCK_SIZE?+?8))
split_block(b,s);
}?else?{
/*?看是否可進行合并?*/
if(b->next?&&?b->next->free
&&?(b->size?+?BLOCK_SIZE?+?b->next->size)?>=?s)?{
fusion(b);
if(b->size?-?s?>=?(BLOCK_SIZE?+?8))
split_block(b,?s);
}?else?{
/*?新malloc?*/
newp?=?malloc?(s);
if?(!newp)
return?NULL;
new?=?get_block(newp);
copy_block(b,?new);
free(p);
return(newp);
}
}
return?(p);
}
return?NULL;
}

3.3 遺留問題和優化

以上是一個較為簡陋,但是初步可用的malloc實現。還有很多遺留的可能優化點,例如:

  • 同時兼容32位和64位系統

  • 在分配較大塊內存時,考慮使用mmap而非sbrk,這通常更高效

  • 可以考慮維護多個鏈表而非單個,每個鏈表中的block大小均為一個范圍內,例如8字節鏈表、16字節鏈表、24-32字節鏈表等等。此時可以根據size到對應鏈表中做分配,可以有效減少碎片,并提高查詢block的速度

  • 可以考慮鏈表中只存放free的block,而不存放已分配的block,可以減少查找block的次數,提高效率

還有很多可能的優化,這里不一一贅述。下面附上一些參考文獻,有興趣的同學可以更深入研究。

4 其它參考

  1. 這篇文章大量參考了A malloc Tutorial[7],其中一些圖片和代碼直接引用了文中的內容,這里特別指出
  2. Computer Systems: A Programmer's Perspective, 2/E[8]一書有許多值得參考的地方
  3. 關于Linux的虛擬內存模型,Anatomy of a Program in Memory[9]是很好的參考資料,另外作者還有一篇How the Kernel Manages Your Memory[10]對于Linux內核中虛擬內存管理的部分有很好的講解
  4. 對于真實世界的malloc實現,可以參考glibc的實現[11]
  5. 本文寫作過程中大量參考了維基百科[12],再次感謝這個偉大的網站,并且呼吁大家在手頭允許的情況下可以適當捐助維基百科,幫助這個造福人類的系統運行下去

參考資料

[1]NP-hard:?

http://en.wikipedia.org/wiki/NP-hard

[2]MMU:?

http://en.wikipedia.org/wiki/Memory_management_unit

[3]頁表:?

http://en.wikipedia.org/wiki/Page_table

[4]TLB:?

http://en.wikipedia.org/wiki/Translation_lookaside_buffer

[5]圖片來源頁:?

http://en.wikipedia.org/wiki/Page_table

[6]Linux內核相關文檔:?

https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt

[7]A?malloc?Tutorial:?

http://www.inf.udec.cl/~leo/Malloc_tutorial.pdf

[8]Computer?Systems:?

A?Programmer's?Perspective,?2/E:?http://csapp.cs.cmu.edu/

[9]Anatomy?of?a?Program?in?Memory:?

http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

[10]How?the?Kernel?Manages?Your?Memory:?

http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory/

[11]glibc的實現:?

http://repo.or.cz/w/glibc.git/blob/HEAD:/malloc/malloc.c

[12]維基百科:?

http://www.wikipedia.org/


向下滑動查看

原文:https://kb.cnblogs.com/page/512454/

文章來源于網絡,版權歸原作者所有,如有侵權,請聯系刪除。



掃碼,拉你進高質量嵌入式交流群


關注我【一起學嵌入式】,一起學習,一起成長。


覺得文章不錯,點擊“分享”、“”、“在看” 唄!

一起學嵌入式 公眾號【一起學嵌入式】,RTOS、Linux編程、C/C++,以及經驗分享、行業資訊、物聯網等技術知
評論
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態脈沖干擾,這類干擾持續極短,卻足以在高速鏈路中引發誤觸發。然而,傳統函數發生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態上報。三件事拆開,早先的常規做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創知音語音芯片 2026-08-06 15:14 287瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 382瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 111036瀏覽
  • 摘要在防爆電氣設計中,只參照芯數選型而忽略額定載流量,長期滿負荷運行會出現插頭發熱、接觸面氧化、IP67 密封受熱老化等問題。結合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數對照表,區分冷壓免焊接、焊接兩種接線結構的安全載流數值,設置合理電流冗余系數,搭配使用環境修正參數,規范防爆接近開關連接器、防爆法蘭插座的選型計算方式。關鍵詞圓形防爆連接器,載流參數表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產品概述圓形防爆連接器觸點載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128644瀏覽
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環路、TL431 精密恒壓反饋環路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節點電位;該節點直
    southcreek 2026-08-07 13:45 328瀏覽
  • 文:杜杰編輯:侯煜當地時間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設備——境外生產的先進機器人設備、境外生產的聯網電力逆變器。FCC在官方情況說明書中明確,該類境外制造產品,“會對美國國家安全或美國民眾的人身安全構成無法承受的風險”。本次新規設置明確豁免機制:經美國國防部(DoW)、電力逆變器品類經美國國土安全部(DHS)審核并授予“有條件批準”,認定對應設備品類不存在重大安全風險,即可獲得準入豁免。同時政策嚴格執行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 325瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設計 2026-08-03 10:21 128877瀏覽
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發式的增長窗口。在這一關鍵節點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規格上的底層創新,成功打破了“高性能必高功耗”的傳統魔咒,為行業提供了極具競爭力的連接最優解。核心技術優勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 169瀏覽
  • 在前六期中,我們已經分別討論了 CRA 的適用范圍、整體影響、漏洞通報義務、風險評估與技術文檔證據鏈、第三方組件與 SBOM 供應鏈治理,以及產品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業已經能夠回答幾個核心問題:產品是否落入 CRA 適用范圍,產品由哪些組件構成,企業如何證明自己在設計、開發和上市前采取了必要的安全措施,以及產品上市后如何持續維護和安全下線。但對于真正準備落地 CRA 合規的企業來說,還有一個更現實的問題:CRA 的法規條文相對原則化,企業應當如何把“網絡安
    虹科云科技 2026-08-03 16:51 159968瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 三年大片观看完整版免费高清| 机场特警评价| 丰满的继牳伦理8伦理| 九九热卖网| 一生守护电视剧全集百度影音| 铜铜铿锵锵将| 生万物电视剧第15集| 兄弟的老婆10免费观看电视剧| 三世情缘 欧阳震华| 波多野结衣教师系列精品| 台剧《浪漫女家教》在线看全集 | 放羊女孩2免费版| 姜汉娜《完美邻居》姜汉娜姜扮演者mm| 八尺夫人意大利免费观看全集高清| 废柴嫡女:逆天修仙飒爆了全集免费 | 大秦帝国之纵横免费播放| 极品教师第二季免费观看完整版| 《马克斯·维斯塔潘:新征途》| 纯白交响曲动漫免费观看| 《村枝》雨晴版| 康熙来了青峰| 17·3电影高清在线观看| 将军之夜| 好姐妹高清在线韩国电影观看| 斑马电影街| 十全电影在线观看免费| 爱情真善美电视剧| 一起来看流星雨31| 都市护花:退役兵王短剧全集| 吻舔咬抽插轮J1V多| 战斗之魂:少年激霸弹| 丫鬟逆袭全集免费| 樱桃红第二部| 皇宫宝贝| 最新西游记| 一周的偶像170111| 娘亲舅大电视剧免费观看完整版| 继续跳舞| 范丞丞演的电视剧| 新还珠格格第三部全集| 基因决定我爱你电影| 向井蓝之特殊治疗医护最新消息| 电影《之后》| 三年成全免费完整观看| 大冶风云网| 魔女宅急便电影| 动漫《落魄贵族琉璃川》| 黑白道粤语| 三年大全国语在线观看| 许我耀眼32集免费观看| 酒井法子空蝉之森原版| 武动乾坤第一季免费观看完整版| 海南省| 我爱妹妹网| 《女学生的滋味》菲律宾| 左宗棠电视剧20集全集免费观看| 白峰美羽无码| 有兽焉第四季动画免费观看| 飞翔吧 战机少女| 30分钟插曲的痛免费播放第8集| 平凡职业成就世界最强| 锦鲤空间:好运爆棚挡不住短剧全集 | 摇滚狂花电视剧免费观看| 李克勤个人资料简介| 曹操跑腿| 霍爷家的小祖宗甜又野免费阅读| 女超人麦乐迪在线完整版| 为你存在歌词| 假面骑士blade| 《驯服2》丽卡和谁在一起| 五福临门在线观看| 《神探狄仁杰2》电视剧| 男人女人一愁愁愁电视剧在线观30集| 大院里的女人| 奥尼尔名人堂演讲| 不当军事行动未删减版| 狂飙电视剧在线观看完整版免费| 今日之欲免费观看完整版| 《意大利夫人》| 刘青云电影| 林师傅在首尔百度影音| 黑白配在线观看免费高清视频| 灵域电视剧免费观看全集在线 | 你是迟来的欢喜全集免费观看| 女人的故事| tek-081| 惊弦电视剧免费完整版| 卖房子的女销售2| 甩皮鬼在线观看| 刀郎新歌翩翩| 什邡市| 银河奥特曼9| 古惑仔友情岁月演唱会| 金阳县| 新网球王子ova4| 牙医姐妹完整版视频播放| 夺命鹰爪功电影| 苍空井| 雪豹坚强岁月46集播放| 《大侦探 第十一季》未删减| 星克莱尔《迷宫》在线观看| 华丽的外出视频| 韩剧闺蜜的背叛| 甄嬛传免费全集观看完整版在线| 好妈妈1| 男女一起愁愁愁高清全集免费 | 师傅在首尔| 木下檀檩子点外卖的电影| 钻石夜总会 变脸| 善良的儿媳妇电影在线观看免费版 | 家教女老师| 麦乐迪女超人在线观看完整免费高清原声满天星百 | 别墅轮换5攻略免费| 他不是我泰剧在线观看| 碧血青天杨家将| 人猿泰山1995版迅雷| 沧元图动漫第60集| 时光代理人第11集| 一言为定的挑战| 我老公的家庭教师韩国| 维修工艳遇日剧| 田震最新歌曲| 高清《巴勒斯坦36》电影| 子交换1的中文翻译| 斗鱼静宝宝| 北方影院迷宅幻影| 维修工的艳遇电影日本| 舞出我人生4高清| 娘家的故事爱的重生| 法国满天星《女飞行员》| 解药动画片全集在线观看| 贺军翔电影| 睫毛膏3美国1990| 青楼女人绝活免费观看电视剧| 咒术回战在线观看免费观看| 卖房子的女销售员在线| 豪情电视剧| 捆绑影视| 木下檀檩子电影在线| 姜子牙电影在线观看| 新天师斗僵尸2| 做aj电视剧在线观看| 世上只有爸爸好完整版电影| 父母爱情免费观看| 1994年意大利赛伦渔夫和他的妻子| 甄嬛高清| 歌曲披着羊皮的狼| 高要市| 电视剧鬼丈夫| 金牌月嫂狂甩女婴| 战至巅峰第三季2024免费观看| 特殊的保险销售员8| 简言的夏冬全集免费播放| 三生三世枕上书56集免费观看| 女律师的坠落在线观看免费版电视剧 | 误入军统的女人全集在线观看| 最新韩国电视剧| 爱情有点蓝歌曲| 索命哨全集观看| 美容室的特殊待遇是2| 柬埔寨公主用中文拜年| Overflower在线观看| 菜根谭的作者是哪个朝代的人| 斗罗大陆146集在线观免费观看| 干干人人| 《overflower》第一季真人版| 聊斋觅仙路| 电视剧最后的较量| 美妙发型屋韩国| 爱恋下载| 高清《纵情欲海》1无删减| 酒店全集1-5| 红蓝3d| 滚石30年台北演唱会| 新还珠穿帮镜头| V酒店第一季在线播放| 《我的罪恶人生》| 鹿鼎记在线观看| 《需要爸爸播种美国》爸爸是谁扮演的| 动漫无双3终极无敌版| 沉默的真相在线观看免费完整版| 年轻瘦子hd| 东京女孩时尚秀| 斗罗大陆第153集免费观看| 坎贝奇《品味人生无憾》免费播放 | 哪吒1在线观看| 军事不当行为1985意大利| 大漠孤侠| 寄往电视台的神秘影像未删减| 21世纪爱情指南免费看在线| 《少女大人》在线观看| 龚玥菲新金瓶高清什么时候上映| 河东区| 善良的小姨子下载| 失乐园在线观看| 宝贝计划成龙| 义姐不是不良妈妈免费看| 百万新娘之爱无悔未删减版| 加里森敢死队电影| 美丽的桃子5大结局| 电影《焦点》完整版免费观看| 天地传说之鱼美人电视剧| 年轻的小瘦子| 热辣滚烫电影完整版| 这么多年电影在线观看| 大叔小馆第1季完整版| 十九岁完整版在线观看好看| 四渡赤水完整电影| 鸭王2在线观看免费观看| 0verflower第一季真人版| 百万新娘之爱无悔67| 真咲恵美| 我年轻瘦子的9| 谎言的诱惑| 野兽迷宫电影免费播放在线观看| 《马上天下》电视剧| 莫妮卡贝鲁奇《地爆天星》电影无删减版在线观看 | 夜游的生活| 麻生香织黑肌泣BD在线| 朋友的母亲3中字谜给看| 怎么减肥管用| 郝板栗的电影| 疯狂的外星人在线观看| 星兽猎人2| 二对一| 聊斋艳谭电视剧在线观看免费| 我们都是好朋友电视剧| 出轨人妇各系列25目录| 肉蔻之香在线播放| 年轻的妺妺3按摩| 生化危机终章在线观看| 做aj的电影免费观看大陆| 电影杜十娘完整版| 《惊变28年》| 诡故事第一季| 强奸2制服诱惑| 电视剧洪湖赤卫队| 火线警告第一季| 《初体验5》完整版普通话11| 斗破苍穹年番101-104| 姐妹反目全集免费| 《乳房按摩》在线观看| 富婆20万睡小22岁小伙| 铠甲勇士星耀觉醒| 艰难爱情全集免费观看| 《丈夫面前被搬工人欺负的电影》全 | 爱人在线观看成贤免费| 《爱我几何》完整版在线观看电影| 半生缘剧情| 东莞东坑新东泰| 韩国漂亮的小瘦子8| 《庆余年2》第107集| 赏金猎人皮肤| 小品火炬手| 原千岁在线视频| 我家有个日本女人| 与我同眠| 美国禁忌睫毛膏4完整版她说视频| 僧侣之夜全集动漫在线播放观看| 后宫 帝王之妾在线观看| 爱我几何电影在线观看免费莫尼卡 | 骄阳似我2025免费观看| 澈情从林短剧免费观看全集| 喝毛尖的好处| 韩剧《蓝色生死恋》国语| 美国1一7| 甜性涩爱优酷网| 蓝可儿电梯事件| 牌坊下的女人| 水电工人的艳遇| 8090三个人的冬季恋歌| 草莓之夜电影版在线观看| 电影《空姐4》完整版| 九幽圣主| 新金梅瓶2 国语完整版 | 善良的秘书法国空乘| 斗罗大陆193集免费完整观看| 老妈和我一起嫁| 渔夫荒野正版免费观看| 张国荣红楼春上春| 下辈子做你的女人剧情简介| 初恋时间第一集在线观看免费高清| 夫人的侄子1994剧情简介| 华晨宇 假行僧| 监控人1到100集免费看| 《G点》1985欧美在线观看| 寻梦环游记(普通话版)| 禁忌女孩2在线泰剧观看| 进击的巨人 23| 《公的浮之手电影| 叛逆者1-42集完整| 刀郎金刚经歌曲播放| 大洼县| 女超人满天星电影免费观看| 八犬传之东方八犬异闻| 阴阳镇怪谈电影在线观看| 莫莉3特别的酒店免费| 匆匆那年| 歌曲再度重相逢| 末日村庄电影免费观看| 长津湖战役3免费观看| 《头脑特工队》2| overflow樱花| 宋雨琦张薇电视剧| 金惠秀老千| 法国《高压监狱》2| 楠木邸的神明庭院未删减| 十大奇冤 电视剧| 保卫黄河歌谱| 美乃雀免费在线电影| 老公不知情电影| 终极斗士3在线观看完整版免费| 赛伦电影成人版无删减| 汇通天下国语| 空房间电影高清免费观看全集| 我的女友是机器人在线| 妻子和上司出差住酒店怎么办| 愤怒的小鸟2电影| 龙器电视剧在线看免费观看| 永不退缩3完整版| 背叛丈夫的女社长中文版主演是谁| 黑道大佬第2季免费观看| 韩剧《上司的秘密》电视剧| 圣佩罗特斯的姑娘们 | 盛夏晚晴天全集在线观看| 欲情之屋2014甜美情事尹大麦为什么播| 有情饮水饱粤语| 名侦探柯南16 第11个前锋| 荃湾区| 《性的暴行》在线观看完整版| 法国空姐6电影在线观看完整免费高清原声麻将胡了 | 无敌铁桥三电视剧| 秘女搜查官波多野结衣| 精武家庭| 高清刺杀小说家2未删减| 我的xl司令在线观看免费高清全集| 战勇第二季| 东方红的简谱| 啦啦啦中文日本免费高清完整版一| 姐妹牙医 在线观看| 萌萌侵略者| 爱在春天电视剧| 荣都怪谈| xl司令动漫第一季全集无马赛克 | 魔装学园hxh无修| 战狼6女版免费观看高清版| 七月十四之不见不散| 黑衣人1高清| 上瘾的婚姻免费全集在线观看| 黑白配高清国语全集在线看| 我爱背单词| 天涯杂谈| 女武神的终末| 韩国伦理部长来我家| 绝密543免费全集(36集全)| 假面骑士零诺斯| 天下长河免费观看全集高清| 凌云壮志满天星法国版| 唐朝妖姬| 短剧皓龙长空免费观看| 《主咖和Ta的朋友们》| 爱在苍茫大地全集| 两不疑动漫全集在线观看| 《爱我几何》电影免费| 被欺凌的女人全集| 深夜航班 第二季电视剧| 泰森7月20日大战杰克保罗| 坎贝奇第二部曲《品味人生》下载 | 牙医姐妹在线观看| 法国空姐第4季完整版| 苹果范冰冰无删减| 泰安华通集团最近消息| 白峰美羽主演电影为了心爱的丈夫| 恋爱先生45集全集免费下载| 绝世唐门2免费观看动漫| 五号特工组第3部| 秋瓷炫死生决断播放| 秘密花园第三集| 容嬷嬷的小黑屋| 中美防长在新加坡会晤| 郝板丽在线观看| 鬼宫电视剧在线观看免费版| 甜美姐姐动漫在线观看免费版 | 聊斋艳谭之欲焰三娘| 粉红女郎高清| 植敬雯《丛林女超人满天星版》| 郑和下西洋电视剧| 象限之眼| 重生妻子的复仇| 《角斗士3满天星版》在线观看| 慕尼黑电影完整在线观看| 过家家未删减| 幸存者1937免费观看完整版| 成全视频观看免费高清动漫第8季在线 | 巜变态性刑房3| 年轻的母亲1在完整有限中字| 璀璨人生有多少集| 妖精的尾巴53| 落魄贵族琉璃川在线免费看全集| 穿越火线网剧在线观看| 电影大刀王五| 肥肉合集| 女友妈妈双字ID| 神府红军游击队| 最近日本电影高清免费观看| 白昼美人| 美姊妹牙医完整版在线观看| 重振精武门| 美丽猎物1993版| 果宝特攻5| 女超人| 泰国租妻价格| 赤坂丽的牙医姐妹在线电影| 她的日与夜电视剧免费观看| 正在播放: JUQ-101 在没有我丈夫的五天里,我被命令禁欲到第一个晚上。不想要 | 斗破苍穹第| 《家属》| 又见逍遥电视剧免费观看全集| 韩剧浪漫满屋中文版| 以家人之名免费版观看全集| 爸爸播下种子美剧免费观看| 《美国式禁忌》hd| 万古仙穹动漫第二季| 驯龙高手第一季| 姐妹医牙完整版| 铁血少年| 满江红电影张艺谋免费观看?| 困惑的LANGM| 海之声完整版973| 可疑的美发店| 矿哥矿嫂的平凡生活| 美景之屋5未增减板| 需要爸爸种子在线观看| 本能 电影| 特朗普称美国正从内部死亡 | 新世纪高潮战队| 我坚强的小船| 北方警察| 曹查理电影大全免费观看国语 | 丧尸之地| 张大大曝杨颖带妆睡觉| 《xl司令》在线观看完整版动漫 | 电影1942| 新妈妈中文| 公孚之手9| 电影美乃雀主演替夫还债| 爱情诗歌散文| 非诚勿扰2电影下载| 电视剧画眉全集免费观看高清| 需要爸爸的播种 中文播放| 我的快乐人生| 地下城与西游记全集| 世界末日是哪天| 日韩电影维修工的艳遇| 公交车轮交流啊出来了视频| 生死时速| 天天向上20120330| 空乘2023法版在线观看| 一秒钟亿万富翁| 李安 逝去的爱| 斑马视频电影完整版在线观看| 圣特罗佩姑娘们免费观看| 帝皇侠大电影| 无可奈何| 地铁迷情| 原版江南style| 韩国电影四个已婚妇女去按摩| 电视剧誓言无声| 活佛济公3全集| 别墅互换在线观看| 老师的手指在里面转动的写| 好姑娘4完整版在线观看| R片| 毒医嫡女:下毒医术超精通全集免费| 电影风声未删减版在哪里可以看| 火线警告第一季| 美丽小的瘦子4| 韩剧《隐身蓝帽子》短剧| 金水桥边电视剧| 维斯塔小镇家长会2免费观看| 邻家特工中文版| 《和讨厌的部长出差旅》大结局| 江苏卫视好好学习| 高清《安娜情欲史》未删减版| 豪宅8804万成交| 人猿泰山1995年版在线观看| 停不了的爱 刘德华| 冰湖行动全集观看| 真探第二季在线观看完整版| 房产销售电影在线观看| 斗破苍穹第四季17集在线观看| 冒牌英雄| 恋梦空间第二季| 奔跑吧兄弟最新一季2024| 晚安为我而我的妹妹| 《鬼咬鬼》高清国语版 | 东丰县| 强伦轩女教师在线看| 第三种爱情在线观看| 致命弯道5 电影| 家有喜事1992国语| 金银瓶1—5hd 普通话一级| 守护解放西第二季在线播放| 美国队长高清完整版| 宇宙英雄奥特曼全集| 姐妹牙医在线观看| 两个母亲ID两个妈妈| 东莞第一高楼| 僵尸道长2全集| 驯龙高手第一季| 男按摩师电影院| 婆婆来了分集介绍| 义姐是不是良喂养樱花第2集 | 罕见四胞胎排排睡| 电影《巴黎女流氓》免费观看| 金瓶梅五级电视剧视频观看| 中俄列车大劫案纪录片| 全职高手第三季免费观看动漫| 中北大学文科有哪些专业可选 | 鹿鼎记周星驰下载| 泰剧爱的涟漪国语版| 《莲花楼》电视剧| 女大学生的心理沙龙室| 姐妹牙医1986| 封神演义评书| 不能说的秘密| 侣行第二季| 外卖员在线观看整板| 兔子先生免费全集在线| 《黑白潜行》在线观看| 婆婆来了全集| 电视剧闯关东免费观看全集高清| 安斋拉拉出演的电影| 沙漠战争| 南乐县| 木子檀檀子剧免费观看第10集| 安乃近说明书| 高清《百万人推理》电视剧 | 《初体验5》电影完整版在线观看| 菲律宾电影修理工的艳遇| 《被下药强辱的妻子| 花木兰2动画片| 女儿的奶水| 佩奇小猪佩奇动画片免费观看| 交换上司秘书在线观看| 诡异电梯| 欲百度影音| 好日子在线观看免费播放| 公浮之手电影在线播放完整版| 公公给儿媳妇的礼物| 沧州绝招| 电影《寡妇村》海外版| 贝尔法斯特天堂路全集观看 | 亲爱的姐姐1在线观看完整版| 电影跳出去| 沉默羔羊| 美人心计21| 决战秋瓷炫三部曲| 电视剧蝶影全集免费观看下载| 《情趣用品调教》| 女教师被入侵电影| 销售的销售秘密2HD中字国| 美姊妹赤板栗中字完整版| 富贵男与贫穷女电视剧全集免费观看 | 巜人妻初次按摩2在线| 古船女人和网| 胭脂霸王电视剧| 返老还童的电影| 麦乐迪马克斯女超人电影| 新金瓶梅2008第二集| 破晓之爱| 《再去温泉吧!》第一季| 南风拂我意| 我的美女姐姐欧美。| 斗罗大陆152| 欢笑老弄堂| 人民名义电视剧| 歼灭天际线1-62集免费| 我的好兄弟的女朋友短头发| 一场风花雪月的事电视剧| 夺命鼠标电影完整视频播放免费观看| 哈利波特1国语版免费| 黑白配中文高清完整版| 美国禁忌睫毛膏4无删减| 我的青梅竹马是消防员 第一季 | 九龙城区| 示范销售避孕套免费看| 回复术士的重启人生动漫| 《暮光之城4:破晓(下)》 | 战狼6欧式少女一共多少集| 万里归途电影抢先看| 姐妹牙医电影在线完整版观看中文| 灵蛇爱国语版| 阴宅凶灵| 三级片迅雷下载| 《拳击手2满天星版》在线观看| 西班牙满天星电影在线观看完整免费| 天璇迷局| 聚会的目的百度云| 求婚大作战 韩剧| 越南女兵满天星| 伦理片高压监游完整燃| 韩国电影办公室3免费完整版播放| 古见同学有交流障碍症第二季 | 绝色神偷蜘蛛被欺负完整版| 我们高清在线观看免费中文| 如懿传全集免费完整版在线观看| 女员工的付出 中文| 被义子侵犯的继拇在线播放| 中央10台在线直播| 一起又看流星雨36| 左耳免费| 真破血全集免费播放高清版| 白峰电影国语免费全集| 夜火内衣秀| 良医第一季在线观看免费完整版| 吻别英文版叫什么| 屠宰场娃娃免费高清版在线观看| 战狼6免费高清版电影下载| 锦医风华短剧免费观看完整版| 大地5资源在线观看高清国语版| 万古仙王200集完全版| 黑白配在线观看免费观看高清版| 大话西游降魔篇电影| 血中悍刀行| 金银悔1—5HD普通话| 21世纪性格爱情指南完整版| 绝密543免费全集(36集全)| 《古墓神蛇》| 魔装学园hxh无修| 变形金刚2观看| 韩剧《隐形的帽子》| 欢乐喜剧人第三期完整版| 妈咪直播打扑克| 隐形的亿万富翁电影免费观看| 空前绝后满天飞在线观看| 二阶堂丽| 新年行动| 福州 劫持人质| 人犬兽人第1集免费观看| 传教士第一季| 爱上大佬360第四季| 波多野吉衣电影免费看| 越战创伤国语免费观看高清在线| 花花公子电子杂志| 三进山城在线观看| 房东女2| 有菜电影在线播放| 湄洲岛奇缘| 盗墓风云| 甄嬛传电视剧全集完整版免费观看| 尾崎爱花| 千灭天际线| 荒野求生贝尔 格里尔斯| 咒术回战第三季| 守护甜心第三季| 铿锵铿铿锵免费观看西瓜视频| 跟着部长出差免费观看| 功夫熊猫2电影| 和讨厌的部长一起去出差旅的电影叫什么 | 小小谭的生活最新视频| 斗罗大陆剧场版 剑道尘心| 异形:人族的统治| 变形金刚1迅雷下载| 《特殊游泳教练》免费观看平台| 军事不当免费观看| 邻家间谍| 沧元图第二季番外篇| 美人鱼的动画片| 邵氏《金莲外传》免费观看全集| 壮云凌志在线观看满天星| 机器侠电影| 花宫亚美| 要听爸爸的话未删减| 最新泰剧| 三年中国国语版免费| 黑执事第二季10| 隔壁的女孩3在线观看| 人妻在卧室被老板疯狂进入国产| 小女花不弃剧情| 木下檀檩子40集全| 新版《水浒传》| 王者清风剧情介绍| 道士下山 豆瓣| 大话西游之月光宝盒粤语| 八仙饭店2埃博拉病毒 | 五号特工组1全集| 西游记续集8| 水卜樱剧情解析图解gif| 隔壁阿姨| 初婚电视剧全集免费观看| 人民的名义2在线观看免费完整版| 饺子电影| 禁忌3年转一代中文字母| 坎贝尔电影《无憾》在线观看 | 总统夫人罗丽星克莱尔版翻译| 《新人类之毒医肥尸2》在线播放 变形金刚7国语HD免费完整版80 | 卢旺达的玫瑰完整版| 瘦子3| 跳进地理书的旅行第二季| 情难自制在线| 大内密探之零零| 走天涯dj| 白衣绳索牙医| 向井蓝之特别性看护在线观看 | 美国爱情片真爱禁区片段| 火影忍者全集土豆网| 会同县| HD版泰山《激情丛林》完整版免费 | 小胖俞涛回应九转大肠梗| 地下交通站第一部| 时间停止器电影免费版| 特种兵之火凤凰27| 簧片网址大全| 欧美506070| 漂亮的丰年经的继拇4中字| 看孙悟空三打白骨精| 轮到你了第9集| 黑白配在线观看完整版免费高清| 特殊治疗室五| 黄景瑜冬至电视剧全集免费观看| 星空在线观看免费高清| 老丁是个生意人| 斗罗大陆第173集| 黄秋生《雨夜屠夫》国语| 媛崽好困原视频完整版| 北京财经频道| 护心电视剧免费观看完整版| 绯闻女孩第一季高清| 《汉尼拔第一季》电视剧| xl司令动漫第一季全集在线观看免费播 | 小凤新婚下在线观看免费版| 媳妇的美好宣言电视剧| 爱情睡醒了图片| 黑客帝国免费| 范特西强吻奶酪图片| 《康体水疗》1978完整版视频 | 禁忌5年转一代| 播放 - 女律师的堕落高清 - 剧情电影 - 蘑菇影视 | 沉静如海| 少年透明人| 天赋异禀北极星免费观看| 西游 降魔篇电影| 运城市| 爱我几何完整版播放| 篮球少年1| 废柴嫡女:逆天改命飒爆了全集免费| 隐身女侠的电影免费观看| 黑超特警组| 公之浮手中30| X L司令| ssni780| 韩国男生女生愁愁愁电视剧在线观看 | 美国1985G点2| 高压版女子监狱满天星| 用一生爱你| 电视剧爱情男女| 甄嬛传49| 警告安全电影| 事物的秘密在水池一段是多少比喻| 四个少妇精油按摩电影在线播放 | 《混凝土市场》| 龙子太郎动画片免费高清版国语| 侠岚第3季全集| 《新上任的女员工》| 《法国护士长》在线| 电锯惊魂4下载| 实习医生电影| 真爷们儿电视剧全集| 你好世界在线观看完整版免费高清| 马达加斯加的企鹅第二季| 法国《遗产》罗丽星克莱尔| 韩媒曝李善均遗书内容| 扫黑风暴全集资源| 人世间在线| 白发魔女练霓裳| 阿lin| 房权试爱开头录音免费听| 吴绮珊香醇绣感1999版哪里买| 虫族之心剧情| 擦枪走火电影完整版| 王府主母:深宅掌权短剧全集| 蛇舌完整版| J情丛林| 同学的妈妈中韩双字id贤宇| 追梦高中| 田中柠檬| 会员制餐厅完整版免费高清| 庆余年2电视剧免费87集| 《除却巫山》未删减版| 纱漠行动| 乐游原电视剧40集| 加油吧实习生演员表| 猫和老鼠东北方言版| 余罪第一季24全集未删减版| 女战狼6免费高清版999加拿大版 | 灯草和尚电影下载| 风调雨顺歌谱| 双宝联盟之妈咪快来| 电影《霸占》在线观看| 青梅竹马是消防员 无马| 行尸走肉第七季预告片| 女超人麦勒迪| 17·3在线观看免费| 偶然遇见的你| 神女峰的迷雾| 康熙王朝一共多少集| 霜花店 在线观看| 保罗与雪莉一家4美国| 《售楼小姐的秘密》1| 三圾片2013大全电影| 野外农村经典三级在线观看| 你好儿科医生第三季免费观看| 中北大学文科有哪些专业可选| 电视剧扫黑风暴| 战狠6免费观看全集| 台剧黛比| 假日暖洋洋2电视剧在线观看| 只因我们天生一对泰剧| 青柠在线电视剧免费观看第二季| 爱人电影免费观看韩国| 电影《美容院的特殊待遇》1演员表| 男女一起免费观看高清完整版电视剧| 好妈妈3高清迅雷在线观看| 美国版《丛林女超人》| 给我完整版在线观看| 高清《韩国财阀2》电影| 傲雷雷神2| 被安排和讨厌部长出差韩剧 | 印度教父| 《羞耻(克罗地亚版) 第三季》| 欧式少女10集全观看战狼6| 内衣推销员2中字在线观看| 星际之门 第一季| 北京夜店2女神本色| 电影《活着》完整版| 退休的姨妈从后面| 孙颖莎26分钟下班| 三年大片大全免费观看国语版| 倔强退魔师1-4集在线观看免费| 电视剧生死相依| 赵本山小品相亲2| 一站到底檀越是哪一期| 白日梦我电视剧在线观看免费版 | 皇朝博美犬舍| 快乐星猫第五部| 逐玉未删减| 苍梧县| 艳母2| 凯登克罗斯电影高清播放 | 凤凰卫视一虎一席谈|