日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Proto3:Arena分配指南

發布時間:2023/12/29 综合教程 75 生活家
生活随笔 收集整理的這篇文章主要介紹了 Proto3:Arena分配指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Arena分配是僅C++有的功能,在使用Protocol Buffer時,它可以幫助你優化你的內存使用,提高性能。在.proto文件中啟用Arena分配會在生成的C++代碼中添加處理Arena分配的額外代碼。關于Arena分配API的細節,詳見Arena Allocation Guide。

服務

如果.proto文件中包含下面的內容:

option cc_generic_services = true;

之后,Protocol Buffer編譯器會根據在本節中描述的文件中找到的服務定義生成代碼。然而,生成的代碼可能不受歡迎,因為它并沒有綁定特定的RPC系統,因此需要為一個系統定制更多級別的間接代碼。如果你不想生成這樣的代碼,你可以在文件中添加這一行:

option cc_generic_services = false;

如果上面的行都未給定,默認選項未false,因此不推薦使用通用服務。(注意,2.4.0版本之前,默認選項為true。)

基于.proto語言服務定義的RPC系統應該提供插件來生成適合系統的代碼。這些插件可能需要禁用抽象服務,以便它們可以生成自己的同名類。插件是2.3.0版本(2010年1月)新引入的。

下面的章節描述抽象服務啟用時編譯器會生成什么。

接口

給出如下服務定義:

service Foo {
  rpc Bar(FooRequest) returns(FooResponse);
}

編譯器會生成一個名為Foo的類來表示該服務。Foo中包含服務定義中定義的每個方法的虛方法。這種情況下,Bar方法定義如下:

virtual void Bar(RpcController* controller, const FooRequest* request,
                 FooResponse* response, Closure* done);

這些參數等同于Service::CallMethod()的參數,只是method參數是隱含的,而requestresponse指定了它們的確切類型。

這些生成的方法是虛,但不是純虛的。默認的實現知識簡單地調用controller->SetFailed(),并使用一條錯誤消息指示方法未實現,然后調用done回調。在實現你自己的服務時,你必須子類化這個生成的服務并適當的實現它的方法。

Foo子類化Service接口。編譯器會自動實現如下的Service的方法:

GetDescriptor:返回服務的ServiceDescriptor。
CallMethod:根據提供的方法描述符確定要調用哪個方法,并直接調用它,將請求和響應消息對象向下轉換為正確的類型。
GetRequestPrototypeGetResponsePrototype:針對給定的方法,返回當前類型的請求/響應的默認實例。

也會生成下列靜態方法:

static ServiceDescriptor descriptor():返回類型的描述,其中包括該服務包含那些方法以及它們的輸入輸出類型。

Stub

編譯器還為每個服務接口生成了一個“Stub”實現,由要向實現服務的服務器發送請求的客戶端使用。對于Foo服務,Stub實現被定義未Foo_Stub。就像內嵌消息類型一樣,由于typedef的使用,所以可以使用Foo::Stub來引用Foo_Stub。

Foo_Stub是實現了如下方法的Foo的子類:

Foo_Stub(RpcChannel* channel):在給定的通道上發送請求的新構造的Stub。
Foo_Stub(RpcChannel* channel, ChannelOwnership ownership):在給定的通道上發送請求的新構造的Stub,及通道的所有者。如果ownershipService::STUB_OWNS_CHANNEL,之后在刪除stub對象時也會刪除該通道。
RpcChannel* channel):返回傳遞給構造函數的stub通道。

stub還額外實現了作為通道打包器的每個服務方法。調用其中一個方法只是簡單地調用channel->CallMethod()。

Protocol Buffer庫并不包含RPC實現。但是,它包括將生成的服務類連接到你所選擇的任意RPC實現所需的所有工具。你只需要提供RpcChannel和RpcController的實現。更多信息,詳見service.h。

插件

想要擴展c++代碼生成器輸出的代碼,Code generator plugin可以使用給定的插入點名稱插入下列類型的代碼。除非另做說明,否則每個插入點都出現在.pb.cc.pb.h文件中。

includes:include命令。
namespace_scope:屬于文件包/名稱空間,但不屬于任何特定類的聲明。出現在所有其他名稱空間范圍代碼之后。
global_scope:屬于頂級聲明,位于文件級明明空間之外。出現在文件末尾。
class_scope:TYPENAME:屬于消息類的成員聲明。TYPENAME是完整的proto名稱,例如package.MessageType。在類中,出現在其它公共聲明之后。只出現在.pb.h文件中。

Arena分配指南

為什么要用Arena分配
開始
Arena類API
生成消息類
使用模式和最佳實踐
示例

Arena分配是僅C++有的功能,在使用Protocol Buffer時,它可以幫助你優化你的內存使用,提高性能。本章節是上一章節的補充,它實際上描述了再arena分配啟用時,編譯器生成了什么。本文默認你已經熟悉了語言指南和C++代碼生成指南。

為什么要用Arena分配

在Protocol Buffer代碼中,內存的分配與釋放占據了CPU耗時的很大一部分。默認情況下,Protocol Buffer為每個消息對象、它的每個子對象,以及一些字段類型,比如字符串,在堆上進行內存分配。在解析消息和構建新的消息時,這個分配操作會大量發生;當消息及其子對象樹釋放時,會產生相關應的釋放操作。

基于Arena的分配被設計用來減小這一性能開銷。使用arena分配,新對象從一個叫做arena的大內存塊中分配。通過丟棄整個arena,可以一次釋放所有對象,理想情況下不需要運行任何被包含對象的析構函數(雖然arena仍然可以在需要時維護一個析構函數列表)。通過將對象分配減少為一個簡單的指針增量,這使得對象分配變得更快,而且使釋放時幾乎沒有消耗。Arena分配還提供了更高的緩存效率:當消息被解析時,它們更有可能被分配到連續內存中,這使得遍歷消息更有可能到達熱緩存線路。

為了獲得這些好處,你需要了解對象的生命周期,并選擇合適的粒度來使用arena(對于服務器,這通常是針對每個請求的)。在使用模式和最佳實踐中,你可以了解更多。

開始

首先你需要在每個.proto文件中啟用arena分配。那么你需要在你的.proto文件中添加如下option

option cc_enable_arenas = true;

這就告訴編譯器為你的消息使用arena分配生成額外的代碼,使用如下:

#include <google/protobuf/arena.h>
{
  google::protobuf::Arena arena;
  MyMessage* message = google::protobuf::Arena::CreateMessage<MyMessage>(&arena);
  // ...
}

只要arena存在,通過CreateMessage()創建的消息對象就一直存在,而且你不應該delete返回的消息指針。該消息的所有內部存儲(少數例外(^1))以及子類消息(例如,MyMessage中重復字段的子類消息)也都在arena上分配。

在大多數情況下,代碼的其余部分與不使用arena分配是一樣的。

在下一小節中會看到更多的arena API的細節,在文末的示例中你能看到更多使用細節。

1 目前,即使包含的消息在arena中,字符串字段也將其數據存儲在堆中。未知字段也是在堆上分配。

Arena類API

在arena上,你可以使用google::protobuf::Arena類來創建消息對象。該類實現了下列的公共方法。

構造函數

Arena():使用默認參數創建一個新的arena,針對一般的使用場景。
Arena(const ArenaOptions& options):使用特定的分配選項來創建一個新的arena。在ArenaOptions中,可用的選項能夠使用一個初始的用戶提供的內存塊分配之前采取系統分配程序,控制初始和最大請求大小的內存塊,并允許你通過自定義塊分配和回收函數指針來構建釋放列表和其它頂上的塊。

分配方法

template<typename T> static T* CreateMessage(Arena* arena):在arena上創建一個新的消息類型為T的Protocol Buffer對象。消息類型必須是定義在.proto文件中,且文件中有option cc_enable_arenas = true;,否則,將導致編譯錯誤。
如果arena非空,將返回在arena上的消息對象,它的內部存儲以及子類消息(如果有的化)也都在同一arena上分配,且它的聲明周期與該arena的一樣。該對象不能手動釋放:該arena擁有消息對象的生命周期。
如果arena為空,返回的消息對象被分配在堆上,調用者擁有該對象的所有權。
template<typename T> static T* Create(Arena* arena, args...):與CreateMessage()類似,但允許你在arena上創建任何類的對象,即使Protocol Buffer消息類型沒有option cc_enable_arenas = true;:你可以從不支持的arena的文件中使用Protocol Buffer消息類,或任意的C++類。例如,你有如下的C++類:

class MyCustomClass {
    MyCustomClass(int arg1, int arg2);
    // ...
};

你可以在arena上創建它的實例:

void func() {
    // ...
    google::protobuf::Arena arena;
    MyCustomClass* c = google::protobuf::Arena::Create<MyCustomClass>(&arena, constructor_arg1, constructor_arg2);
    // ...
}

template<typename T> static T* CreateArray(Arena* arena, size_t n):如果arena非空, 該方法將為n個類型為T的元素分配原始存儲并返回它。arena所有這返回的內存并在自身銷毀時釋放它。如果arena為空,該方法在堆上分配存儲且調用者獲得所有權。

T必須有一個簡單的構造函數:當數組在arena上創建時,構造函數并不會被調用。

“所有權列表”方法

下面的方法允許你指定特定對象或析構函數為arena所有,從而確保在arena刪除它自己的時候也刪除它們:

template<typename T> void Own(T* object):添加object到arena所有的堆對象列表中。當arena銷毀時,它將遍歷整個列表并使用刪除操作釋放每個對象,即系統內存分配。當一個對象的聲明周期要跟arena綁定,但它本身又不是在arena上分配時,這種情況下該方法很有用。
template<typename T> void OwnDestructor(T* object):將object的析構函數添加到arena的析構函數調用列表中。當arena銷毀時,它將遍歷整個列表并將調用每個析構函數。它不會試圖釋放對象的底層內存。當一個對象是內嵌在arena分配的存儲中但它的析構函數并不會被調用的情況下,該方法是有用的,例如,因為它的包含類是一個析構函數不會被調用的protobuf消息,或者是因為它是通過AllocateArray()手動在被分配的塊上構造的。

其它方法

uint64 SpaceUsed() const:返回arena的總大小,它是所有底層塊大小的總和。該方法時線程安全的;但是如果是多線程并發分配,該方法的返回值可能不包括那些新塊的大小。
uint64 Reset():銷毀arena存儲:首先調用所有注冊的析構函數且釋放所有注冊的堆對象,之后丟棄所有的arena塊。這個銷毀過程與arena的析構函數運行時發生的過程是等價的,只是arena在這個方法返回后會被重用。返回arena使用的總大小:此信息對于調優性能非常有用。
template<typename T> Arena* GetArena():返回arena的指針。雖然不是很有用,但它允許在需要GetArena()方法的模板實例化中使用Arena()。

線程安全

google::protobuf::Arena的分配方法是線程安全的,且底層實現有一定的長度來確保多線程分配更快。Reset()方法不是線程安全的:執行arena重置的線程必須首先與所有執行分配或者使用arena中分配的對象的線程同步。

生成消息類

當你啟用arena分配時,下面的消息類成員會被改變或添加。

消息類方法

Message(Message&& other):如果源消息不在arena上,move構造高效地將一個消息的所有字段移動到另一個消息,而無需進行賦值或堆分配(該操作的時間復雜度為0(number-of-declared-fields))。但是如果源消息在arena上,它將執行底層數據的深拷貝操作。以上兩種情況中,源消息還是有效的但未指定的狀態。
Message& operator=(Message&& other):無論兩個消息都不在arena或是同一個arena,賦值操作高效地將一個消息的所有字段移動到另一個消息,而無需進行賦值或堆分配(該操作的時間復雜度為0(number-of-declared-fields))。如果只要一個消息在arena上或不在同一個arena上,它將執行底層數據的深拷貝操作。以上兩種情況中,源消息還是有效的但未指定的狀態。
void Swap(Message* other):如果要交換的兩個消息都不在arena或在同一個arena上,Swao()的行為與未啟用arena分配相同:它將高效地交換消息對象的內容,通常是通過廉價的指針交換以及盡可能地避免拷貝。如果只用一個消息在arena上或兩個消息不在同一個arena上,Swap()將執行底層數據的深拷貝操作。這一操作是很有必要的,因為交換之后的子對象可能有不同的生命周期,引起use-after-free錯誤。
Message* New(Arena* arena):對標準New()方法的替換重寫。它允許該類型在給定的arena上創建新的消息對象。他的語義與Arena::CreateMessage<T>(arena)相同,前提是它所調用的具體消息類型是在啟用Arena分配的情況下生成的。如果消息類型不是在啟用Arena分配的情況下生成的,當arena非空時,它等同于一個后跟arena->Own(message)的原始分配。
Arena* GetArena():返回分配此消息對象的arena(如果有的話)。
void UnsafeArenaSwap(Message* other):與Swap()相同,只是它假設兩個對象在同一個arena上(或兩個都不在arena上),并且總是使用這個操作的高效指針交換實現。使用該方法可以提升效率,因為,不像Swap(),在執行交換之前,它不需要檢查那個消息位于那個arena上。正如Unsafe前綴所說的,只有在確定消息不在不同的arena上時,你才能使用該方法;否則,該方法可能產生不可預測的結果。

內嵌消息字段

當你在arena上分配消息對象時,它的內嵌消息字段對象(子消息)自動為該arena所有。如何分配消息對象取決于它們在哪定義的:

如果消息類型是在啟用Arena分配的.proto文件中定義的,則對象就直接在arena上分配。
如果消息類型是在另一個沒有啟用Arena分配的.proto文件中定義的,該對象是在堆上分配的,但它的所有權歸父消息的arena所有。這意味著在arena銷毀時,屬于該arena的對象也會被釋放。

下列字段定義之一:

optional Bar foo = 1;
required Bar foo = 1;

在啟用arena分配情況下,下面的方法會被添加或有一些特殊的行為。否則,訪問器方法只是用默認行為。

Bar* mutable_foo():返回子消息實例的可變指針。如果父對象在arena上,返回的對象也在arena上。
void set_allocated_foo(Bar* bar):接受一個新對象并將其作為字段的新值。Arena支持新增了額外的復制語義,來確保對象在跨越arena/arena或arena/heap邊界時保持適當的所有權:

如果父對象在堆上且bar也在堆上,或父對象和子消息在同一arena上,該消息的行為不變。
如果父對象在arena上且bar在堆上,父消息使用arena->Own()bar添加到它自己的arena所有去列表。
如果父對象在arena上且bar在另一個arena上,該方法生成消息的副本將將其作為字段的新值對待。

Bar* release_foo():如果存在返回字段已存在的子消息實例,如果不存在則返回空指針;將該實例的所有權移交給調用者并清理父消息字段。Arena支持新增了額外的復制語義,以確保返回的對象總是遵守heap-allocated協議:

如果父消息在arena上,該方法在堆上創建子消息的副本,清空該字段的值,并返回該副本。
如果父消息在堆上,該消息行為不變。

void unsafe_arena_set_allocated_foo(Bar* bar):與set_allocated_foo相同,但假定父消息和子消息都在同一個arena。使用該方法可以提升性能,因為它不需要檢查消息是不是在特定的arena或堆上。只有在確定父消息在arena上且子消息也在同一arena上(或聲明周期與該arena相同)才能使用該方法。
Bar* unsafe_arena_release_foo():與release_foo()類似,但假定父消息在arena上,且返回一個不應該被直接刪除的arena-allocated對象。只有當父消息在arena上時才能使用該方法。

字符串字段

目前,即使父消息在arena上,字符串字段也將它們的數據存儲在堆上。因此,即使arena分配啟用,字符串訪問器方法使用默認行為。

當arena啟用,字符串和字節字段生成unsafe_arena_release_field()unsafe_arena_set)allocated_field()方法。注意這些方法已被棄用,且之后會被刪除。這些方法是被錯誤地添加的,與它們的安全方法相比并沒有性能優勢。

重復字段

當包含的消息是在arena上分配的,重復字段也在arena上分配它們的內部數組存儲;當這些元素是由指針(消息或字符串)保留的獨立對象時,也在arena上分配它們的元素。在消息類級別,為重復字段生成的方法不變。在arena支持啟用時,由訪問器返回的RepeatedFieldRepeatedPtrField對象確實有新的方法和語義的改變。

重復數值字段

在arena支持啟用時,包含原始類型的RepeatedField對象有下列新/變化的方法:

void UnsafeArenaSwap(RepeatedField* other):在無需驗證該重復字段和另一個是不是在同一個arena的情況下執行RepeatedField內容的交換。如果它們不在同一個arena上,那這兩個重復字段對象必須在生命周期相同的arena上。一個在arena上另一個在堆上的情況下,先檢查然后禁用。
void Swap(RepeatedField* other):檢查每個重復字段對象的arena,如果一個在arena另一個在堆上或兩個都在不同的arena上,在交換之前復制底層數組。這意味著交換結束后,每個重復字段都在它自己的arena或堆上保留一個合適的數組。

重復的內嵌消息字段

在arena支持啟用時,包含消息的RepeatedPtrField對象有下列新/變化的方法:

void UnsafeArenaSwap(RepeatedPtrField* other)::在無需驗證該重復字段和另一個是不是在同一個arena指針的情況下執行RepeatedField內容的交換。如果它們不在同一個arena指針上,那這兩個重復字段對象必須在生命周期相同的arena指針上。一個對象有一個非空的arena上指針而另一個有一個空的arena指針,這種情況下先檢查然后禁用。
void Swap(RepeatedPtrField* other):檢查每個重復字段對象的arena指針,如果一個非空(包含在arena上),另一個為空(包含在堆上),或兩個都為非空但值不同,在交換之前會復制底層數組和指向對象的指針。這意味著交換結束后,每個重復字段都在它自己的arena或堆上保留一個合適的數組。
void AddAllocated(SubMessageType* value):檢查給定的消息對象與重復字段的arena指針是不是一樣。如果實在同一個arena上,之后對象的指針就直接添加到底層數組。否則,會生成一個副本,如果對象實在堆上分配的原始的對象會被釋放,副本會被放入底層數組。這保證重復字段所指向的所有對象的指針與重復字段的arena指針指向的所有權域(堆或這指定的arena)相同。
SubMessageType* ReleaseLast():返回與重復字段最后一個消息相同的堆上分配的消息,并從重復字段中移除它。如果重復字段本身有一個空的arena指針(即它所有指向消息的指針都時堆分配的),之后該方法只是簡單的返回原始對象的指針。如果重復字段有一個非空的arena指針,該方法會在堆上分配一個副本然后返回該副本。上述兩種情況下,調用者會的堆上分配的對象的所有權,并負責刪除該對象。
void UnsafeArenaAddAllocated(SubMessageType* value):與AddAllocated()類似,但是不處理堆/arena檢查或任何消息的副本。它直接將提供的指針添加到該重復字段的內部數組指針中。如果重復字段有一個空的arena指針,調用者必須保證提供的對象是在堆上分配的,或者如果重復字段有一個非空的arena指針,則必須在arena分配(同一個arena或相同生命周期的arena)的。
SubMessageType* UnsafeArenaReleaseLast():與ReleaseLast()類似,但不處理任何副本,即使重復字段有一個非空的arena指針。相反,它直接返回該對象在重復字段中的指針。如果重復字段的arena指針為空,返回的對象是在堆上的,如果重復字段的arena指針非空,則是在arena上。如果對象是堆分配的,調用者獲得所有權;如果對象是arena分配的,調用者不能刪除返回的對象。
void ExtractSubrange(int start, int num, SubMessageType** elements):從索引start位置開始,從重復字段中提取num個元素,如果elements非空的話將移除的元素放入elememts中。如果重復字段在arena上,在元素返回之前先將這些元素復制到堆上。這兩中情況下(在或不在arena上),調用者擁有堆上的返回對象。
void UnsafeArenaExtractSubrange(int start, int num, SubMessageType** elements):從索引start位置開始,從重復字段中提取num個元素,如果elements非空的話將移除的元素放入elememts中。與ExtractSubrange()不同,該方法從不復制提取的元素。

重復的字符串字段

重復的字符串字段有與重復的消息字段一樣的新方法和修改的語義,因為它們都是通過指針引用來保存它們的底層數據(即字符串)。

使用模式和最佳實踐

在使用arena分配的消息時,有幾種使用模式可能導致意外的副本或其它負面性能的影響。你應該留意,下面的幾種常用的模式在適配arena的代碼時需要要有所改變。(注意,在API設計中我們已經注意到這一點,以確保依然正確的行為 --- 但是更高性能的解決方案仍可能需要一些返工。)

意外的副本

在啟用arena時,有些在未啟用arena時并不會創建對象副本的方法可能會創建副本。如果你確保分配的對象合適/或使用提供的arena特定版本的方法,就可以避免這些不需要的副本,下面將對此進行更詳細的描述。

設置分配/添加分配/釋放

默認情況下,release_field()set_allocate_field()方法(針對單個消息字段)以及ReleaseLast()AddAllocated()方法(針對重復消息字段)允許用戶代碼直接添加和分離子消息,通過指針的所有權而無需復制任何數據。

然爾,當父消息在arena上時,這些方法有時候需要復制傳入/返回的對象,以保持與現有的所有權兼容。更具體的,當父消息在arena上而新的子消息不在,獲取所有權的方法(set_allocated_field()AddAllocated())可能會復制數據;反之亦然;或它們不在同一arena上。如果父消息在arena上,釋放所有權的方法(release_field()ReleaseLast())可能會復制數據,因為按照約定返回的對象必須是在堆上。

為了避免這些復制,我們添加了這些方法的unsafe arena版本的協議,在這些版本中復制絕不會被執行:對單個和重復字段,分別是unsafe_arena_set_allocated_field()、unsafe_arena_release_field()UnsafeArenaAddAllocated()UnsafeArenaRelease()。只有在你了解這么做是安全且父對象和子對象都能如期分配是,你才能使用這些方法。否則,比如,你可能獲得具有不同生命周期的父對象和子對象,這將導致use-after-free錯誤。

下面是你如何使用這些方法來避免不必要的復制的例子。接下來會在arena上創建下面的消息:

Arena* arena = new google::protobuf::Arena();
MyFeatureMessage* arena_message_1 =
  google::protobuf::Arena::CreateMessage<MyFeatureMessage>(arena);
arena_message_1->mutable_nested_message()->set_feature_id(11);

MyFeatureMessage* arena_message_2 =
  google::protobuf::Arena::CreateMessage<MyFeatureMessage>(arena);

下面的代碼是release_...()API的低效用法:

arena_message_2->set_allocated_nested_message(arena_message_1->release_nested_message());

arena_message_1->release_message(); // returns a copy of the underlying nested_message and deletes underlying pointer

使用unsafe arena版可以避免復制:

arena_message_2->set_allocated_nested_message(
   arena_message_1->unsafe_arena_release_nested_message());

關于這些方法的更多細節,你可以在上面的內嵌消息字段章節了解到。

交換

如果兩個消息處在不同的arenas上,或一個在arena另一個在堆上,使用Swap()交換兩個消息的內容時,底層的子對象可能會被復制。如果你想避免這個復制,且知道這兩個消息在同一個arena上或在有相同生命周期的不同arena上,或知道這兩個消息都在堆上,你可以使用新的方法 --- UnsafeArenaSwap()。此方法既避免了執行arena檢查的開銷,又避免了在可能發生副本檢查的情況下進行副本檢查。

例如,下面的代碼在Swap()調用中會引起復制:

MyFeatureMessage* message_1 =
  google::protobuf::Arena::CreateMessage<MyFeatureMessage>(arena);
message_1->mutable_nested_message()->set_feature_id(11);

MyFeatureMessage* message_2 = new MyFeatureMessage;
message_2->mutable_nested_message()->set_feature_id(22);

message_1->Swap(message_2); // Inefficient swap!

在上述代碼中要避免復制,你可以在相同的arena像message_1一樣分配message_2

MyFeatureMessage* message_2 =
   google::protobuf::Arena::CreateMessage<MyFeatureMessage>(arena);
內嵌消息字段和arena啟用選項

每個.proto都有它自己的arena支持的“功能開關”。如果給定的.proto文件中并沒有設置cc_enable_arenas,那么文件中的類型定義并不會存儲到arena上,即使其它類型中包含在了該文件中定義的子消息類型中。換言之,cc_enable_arenas是不可傳遞的。相反,具有arena資格但本身并不支持arena的消息的子消息將始終存儲在堆上,且會被添加到父消息的arena的Own()中以便將它們的生命周期與arena的綁定。

這樣約定的原因是,如果arena因為一些額外的代碼而未被使用,那么添加arena支持會增加一些開銷。所以我們選擇(目前)不啟用arena的全局支持。而且,由于類型和API兼容性的原因,每個proto消息類型只能有一個C++生成的類,因此我們不能同時生成帶arena支持和不帶arena支持的類版本。未來,功能優化之后,我們可能會取消這個限制,全局啟用arena支持。不過現在,應該為盡可能多的子消息啟用它以提高性能。

粒度

我們發現在大多數服務使用場景中,“arena-per-request”模式表現良好。你可能會嘗試進一步擴大arena使用,以減少堆開銷(通過更頻繁的銷毀較小的arena),或者減少感知到的線程競爭問題。然而就如我們上面所說的,使用更細粒度的arena可能會導致意外的消息復制。我們還為多線程用例優化了Arena實現,因此單個的arena應該適合在整個請求的生命周期中使用,即使是多線程處理該請求。

示例

下面是一個簡單的完整示例,演示了arena分配API的一些特性。

// my_feature.proto

syntax = "proto2";
import "nested_message.proto";

package feature_package;

option cc_enable_arenas = true;

// NEXT Tag to use: 4
message MyFeatureMessage {
  optional string feature_name = 1;
  repeated int32 feature_data = 2;
  optional NestedMessage nested_message = 3;
};
// nested_message.protofset

syntax = "proto2";

package feature_package;

// add cc_enable_arenas on each submessage for
// the best performance when using arenas.
option cc_enable_arenas = true;

// NEXT Tag to use: 2
message NestedMessage {
  optional int32 feature_id = 1;
};

消息構造與再分配:

#include <google/protobuf/arena.h>

Arena arena;

MyFeatureMessage* arena_message =
   google::protobuf::Arena::CreateMessage<MyFeatureMessage>(&arena);

arena_message->set_feature_name("Proto2 Arena");
arena_message->mutable_feature_data()->Add(2);
arena_message->mutable_feature_data()->Add(4);
arena_message->mutable_nested_message()->set_feature_id(247);

更多信息,參見這里。

總結

以上是生活随笔為你收集整理的Proto3:Arena分配指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91试看| 一本一本久久a久久精品综合 | 久草av在线播放 | 四虎在线影视 | 国色天香在线 | 国产精品久久婷婷六月丁香 | 中文字幕综合在线 | 免费看国产a | 99久久久成人国产精品 | 亚洲春色奇米影视 | 视频二区在线视频 | 国产区在线视频 | aⅴ精品av导航| 日韩在线小视频 | 国产高清av免费在线观看 | 成人黄色电影在线播放 | 99免费在线视频观看 | 正在播放国产精品 | 国产精品视频观看 | 91亚洲精品国偷拍自产在线观看 | 国产美女在线精品免费观看 | 在线看日韩 | av免费电影在线观看 | 夜夜嗨av色一区二区不卡 | 午夜精品福利一区二区三区蜜桃 | 91mv.cool在线观看 | 天天色天天上天天操 | 久久国产精品免费视频 | 精品三级av | 91在线公开视频 | 天天干,天天射,天天操,天天摸 | 91日韩精品一区 | 免费在线观看日韩 | 国产精品久久久久久久久久三级 | 国产福利小视频在线 | 亚洲最大av网站 | 欧美精品乱码99久久影院 | 中文字幕免费高 | 在线v片免费观看视频 | 久久在线精品 | 操操操干干干 | 五月综合激情婷婷 | 免费观看日韩 | 国产精品都在这里 | 久久久久久久久久网站 | 午夜视频在线观看一区二区 | 亚洲精品一区二区三区高潮 | 日韩 在线观看 | 成人全视频免费观看在线看 | 午夜男人影院 | 国产精品18久久久久久首页狼 | 99精品免费久久久久久久久 | 亚洲91视频| 西西www444| 成人高清av在线 | 天天色综合久久 | 麻豆观看| 国产视频2 | 日韩在线大片 | 国产性天天综合网 | 欧美一级黄色网 | 青春草免费在线视频 | 免费精品在线观看 | 国产喷水在线 | 亚洲激情av| 国产小视频精品 | 久久久噜噜噜久久久 | 亚洲婷婷在线视频 | 亚洲午夜久久久综合37日本 | 安徽妇搡bbbb搡bbbb | 91精品国产91久久久久久三级 | 欧美精品少妇xxxxx喷水 | 国产亚洲视频在线免费观看 | 久久涩视频 | 国产精品美女999 | 懂色av懂色av粉嫩av分享吧 | 色在线网| av软件在线观看 | 三级黄色大片在线观看 | 日韩综合一区二区三区 | 亚洲成色777777在线观看影院 | 激情网五月天 | 狠狠狠色丁香综合久久天下网 | 在线视频 成人 | 国产精品免费麻豆入口 | 日日草天天草 | 麻豆av电影 | 国产不卡在线观看视频 | www黄色av | 超碰激情在线 | 国产成人三级一区二区在线观看一 | 国产手机视频在线 | 国产99亚洲 | 香蕉在线观看视频 | 国产在线观看xxx | 免费看污片 | 日韩av网站在线播放 | 日韩在线二区 | 免费观看黄色av | 久久久国产精品成人免费 | 深爱激情av | 久久精品之 | 亚洲免费成人 | 一级黄毛片 | 97看片网| 亚洲mv大片欧洲mv大片免费 | 最近中文字幕第一页 | 成人午夜免费剧场 | 日韩在线精品 | 一区二区三区四区五区六区 | 日韩欧美精品在线 | 欧美精品生活片 | 色婷婷亚洲综合 | 午夜私人影院久久久久 | 中文字幕在线看视频 | 天天插日日操 | 婷婷六月久久 | 99免费在线观看视频 | 中文字幕亚洲在线观看 | 96av麻豆蜜桃一区二区 | 天天干天天干天天 | 色搞搞 | 日韩乱码在线 | 91久久国产自产拍夜夜嗨 | 久久免费视频6 | 久久久久久免费网 | 久久激情电影 | 免费在线一区二区 | av在线官网 | 日日干网 | 亚洲国产高清在线 | 草久电影 | av不卡免费在线观看 | 中文字幕av在线不卡 | 夜夜操狠狠操 | 日韩一区二区免费播放 | 日日夜夜天天干 | 中文字幕在线视频第一页 | 丁香婷婷在线 | 草久视频在线 | 麻豆视频在线免费观看 | 欧美精品久久久久久久久久白贞 | 欧美性色综合 | 成人久久18免费 | 精品自拍sae8—视频 | 亚洲一区黄色 | 久久精品xxx | 日韩在线观看网址 | 亚洲精品乱码久久久久v最新版 | 91福利社区在线观看 | 久保带人 | 亚洲天天摸日日摸天天欢 | 欧美日韩69 | 国产亚洲精品v | 久久综合久久综合久久 | 伊人天天操 | 黄色av免费| 久久国产精品免费一区 | 欧美性高跟鞋xxxxhd | 最近最新mv字幕免费观看 | 人人插人人搞 | 欧美成人aa| 四虎国产 | 黄色国产精品 | 日韩视频一区二区三区 | 国产在线a不卡 | 91精选在线| 国产精品久久久久久久久毛片 | 日韩高清观看 | 国产精品久久久久久久久久免费 | 日本一区二区三区免费观看 | 国产在线观看污片 | 中文字幕超清在线免费 | 久99久中文字幕在线 | 在线免费观看国产 | 久久婷婷色 | 亚洲国产午夜视频 | 久久99亚洲精品久久久久 | 一区二区三区 亚洲 | 国产手机免费视频 | 中文字幕一区二区三区乱码不卡 | 偷拍视频一区 | av丝袜天堂 | 色噜噜狠狠狠狠色综合久不 | 亚洲精品美女视频 | 色婷婷激情四射 | 99久久精品国产亚洲 | 免费a视频 | 国产精品免费视频一区二区 | 中文字幕在| 成人视屏免费看 | 一区二区电影网 | 美女黄频免费 | 国产精品理论片在线观看 | 91视频91色| 五月婷婷久久综合 | 热re99久久精品国产66热 | 国产四虎影院 | 午夜电影 电影 | 伊色综合久久之综合久久 | 欧美视频99 | 国产精品福利一区 | 99热精品视 | 欧美综合干 | 91av在线视频播放 | 国产美女在线精品免费观看 | 狠狠撸电影 | 亚洲区视频在线观看 | 色福利网站 | 99精品视频在线播放观看 | 91av综合 | 欧美精品在线观看 | 亚洲精选在线观看 | 欧美人交a欧美精品 | 91麻豆精品国产午夜天堂 | 国产视| 国产精品久久久久永久免费观看 | 狠狠的干狠狠的操 | 久久理论影院 | 国产一级在线 | 国产视频2021| 中文字幕一区二区三区乱码不卡 | 91成熟丰满女人少妇 | 中文字幕在线观看视频一区 | 国产亚州av| 婷婷久久综合网 | 中文字幕日本在线观看 | 国产高清不卡 | 国产成人99av超碰超爽 | 久久人人爽人人爽人人片av软件 | 日韩网站在线免费观看 | 在线观看日韩中文字幕 | 欧美日韩电影在线播放 | 伊人开心激情 | 激情综合网五月激情 | 亚洲精品黄色片 | 在线观看国产www | 激情婷婷六月 | 免费在线黄色av | 国产网红在线 | 亚洲精品视频一二三 | 国产专区在线看 | 久久黄色影视 | 亚洲精品观看 | 久久免费在线观看 | 免费污片 | 成人一区二区在线 | 久久免费国产视频 | 国模一区二区三区四区 | 97操操操| 国产成人性色生活片 | 亚洲精品一区二区精华 | 国产精品理论片在线播放 | 手机成人在线 | 综合色中色 | 91av在线不卡 | 久久夜色精品国产欧美乱 | 日韩综合在线观看 | 亚洲美女视频在线 | 日韩中文字幕视频在线观看 | 高清在线一区 | 成人va在线观看 | 高清av中文字幕 | 91黄色免费看 | 国产一区二区不卡在线 | 中文字幕在线视频一区二区三区 | 久久久久久国产精品久久 | 久久99网站 | 久久视频网 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美日韩久久不卡 | 久久高清免费观看 | 天天操天天色综合 | 久久综合婷婷国产二区高清 | 国产成人精品综合久久久久99 | 超碰在线人 | 久久综合九色九九 | 精品一区二区久久久久久久网站 | 日韩av电影免费观看 | 九九在线视频免费观看 | 国产一区二区高清不卡 | 日韩av成人| 在线观看免费成人av | 欧美日韩免费一区 | 伊人中文字幕在线 | 日本成人免费在线观看 | 我要看黄色一级片 | 亚州国产精品久久久 | 日韩视频一区二区三区 | 久久精品中文字幕免费mv | 美女视频黄免费的 | 色先锋资源网 | 99在线精品视频在线观看 | 九九视频网站 | 国产午夜精品一区二区三区四区 | 99精品久久99久久久久 | 伊人久久av| 国产精品久久久久久久av大片 | 成年人在线看视频 | 久久久官网| 96国产精品视频 | 欧美激情在线网站 | 免费福利片| 亚洲精品在线观看网站 | 亚洲精品国产精品国自产观看 | 欧美综合色在线图区 | 99精品在线看 | 在线观看岛国av | 国产亚洲日本 | h动漫中文字幕 | av一本久道久久波多野结衣 | 久久美女高清视频 | 久久久一本精品99久久精品66 | 国内视频在线 | 久久少妇av| 欧美激情视频三区 | 99免费观看视频 | 日韩欧美视频在线观看免费 | 成人久久精品视频 | 99超碰在线播放 | 日韩欧美一区二区在线观看 | 国产精品美女免费看 | 欧美巨乳网 | 日本爽妇网 | 中文字幕在线观看免费观看 | 成人av在线影院 | 久久91网| 免费人成网| 黄色精品久久 | 成人久久影院 | 91精品伦理 | 婷婷在线不卡 | 99热这里有精品 | 伊人五月在线 | 国产成人精品久久久久 | www.com.日本一级 | 最近日本韩国中文字幕 | 国产精品18久久久久久首页狼 | 少妇搡bbbb搡bbb搡忠贞 | 色综合天天综合网国产成人网 | 最近高清中文字幕 | 97精品国产97久久久久久粉红 | 最新av网址大全 | 久久久久一区二区三区 | 中文字幕一区二区三区在线观看 | 国产精品久久精品国产 | 日日日操 | 午夜视频黄 | 91亚洲精品久久久久图片蜜桃 | 中文成人字幕 | 天天综合网 天天综合色 | 久久激情五月激情 | 国产 视频 久久 | www免费黄色| 亚洲人在线 | 中文字幕在线观看视频一区二区三区 | www.天天草 | 亚洲精品免费在线播放 | 99久久精品国产欧美主题曲 | 久久96国产精品久久99软件 | 婷婷成人综合 | www免费视频com━ | 日日干 天天干 | 国产日韩欧美综合在线 | 免费在线电影网址大全 | 99精品在线观看 | 久草在线手机视频 | 亚洲午夜精品一区 | 国产精品久久久久久久免费大片 | 日批网站免费观看 | 国产精品久久久久毛片大屁完整版 | 婷婷婷国产在线视频 | 中文字幕电影在线 | 免费在线观看av的网站 | 麻豆传媒在线免费看 | 国产精品字幕 | 在线播放国产精品 | 国产三级视频在线 | 激情网站免费观看 | 狠狠色噜噜狠狠狠狠 | va视频在线观看 | 色综合久久中文综合久久牛 | www久久九| 久久久久免费精品国产小说色大师 | 久草视频免费观 | 国产在线视频一区二区三区 | 99中文在线 | 欧美日韩国产二区三区 | av 在线观看 | 精品国产成人在线 | 91夫妻自拍 | 国产免费一区二区三区最新6 | 久久综合给合久久狠狠色 | 一区二区高清在线 | 黄色一级片视频 | 91桃色国产在线播放 | 六月激情婷婷 | 97精品国产91久久久久久久 | 国产精品久久久久久久久久久免费看 | 色在线中文字幕 | 国产亚洲精品久久久久久电影 | 中文字幕日韩精品有码视频 | 久久成人毛片 | 99色在线观看 | 中文字幕韩在线第一页 | 四虎在线观看精品视频 | 精品久久久成人 | 欧美韩日在线 | 国产一区高清在线观看 | 在线国产99 | www黄色com| 久久99热久久99精品 | 黄色片视频在线观看 | 亚洲一区二区三区在线看 | 久久成人欧美 | 91亚洲欧美 | 亚洲天堂香蕉 | 99精品国产99久久久久久97 | 四虎在线免费视频 | 欧美在线观看视频一区二区 | 中文av在线免费观看 | 超碰在线97免费 | 97超视频| 蜜桃av观看 | 亚洲国内精品 | 免费观看的av | 国产精品中文字幕在线 | 国产一级做a爱片久久毛片a | 亚洲黄色在线观看 | 中文字幕一区二区三区四区视频 | 毛片永久新网址首页 | 欧美孕交vivoestv另类 | 91免费日韩| 98涩涩国产露脸精品国产网 | av免费网| 日韩激情在线视频 | 在线观看视频99 | 欧美在线a视频 | 久久久久久中文字幕 | 高潮久久久久久 | 91片在线观看| 精品视频 | 毛片精品免费在线观看 | 日韩在线观看中文 | 999久久久久久久久 69av视频在线观看 | 视频直播国产精品 | 欧美激情第八页 | 久艹视频免费观看 | 国产黄视频在线观看 | 美女免费视频网站 | 手机av电影在线观看 | 国产护士av | 中文字幕免费 | 狠狠色丁香久久婷婷综合丁香 | 免费在线观看成人 | 特级xxxxx欧美| 日韩和的一区二在线 | 最近中文字幕视频网 | av一级在线| free,性欧美| 婷婷久久五月 | 久久国产精品一区二区 | 欧美少妇bbwhd | 91大神精品视频在线观看 | 天天射综合 | 国产精品99久久免费黑人 | 久久久伦理 | 夜夜视频欧洲 | 在线中文字幕观看 | 精品一区精品二区高清 | 国产综合激情 | 国产一区二区久久久 | 亚洲一区欧美精品 | 亚州国产精品久久久 | 在线观看aa| 精品久久亚洲 | 久草香蕉在线视频 | 日韩大片免费在线观看 | 国产99黄| 久久免费精彩视频 | 在线视频电影 | 不卡国产在线 | 欧美日韩中文在线视频 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲国产av精品毛片鲁大师 | 九九九热 | 免费看三级 | 色婷婷久久一区二区 | 久久久黄视频 | 精品国产电影一区二区 | 中文字幕日韩免费视频 | 国产资源免费在线观看 | 日韩高清一二三区 | 黄色大片日本 | 欧美久久99 | 91亚洲精品久久久 | 一区三区视频在线观看 | 精品一区二区av | 在线精品亚洲一区二区 | 日日操日日插 | 日韩精品国产一区 | 亚洲一区视频免费观看 | 天天干夜夜爽 | 日本久久久精品视频 | 99这里精品| 免费色av | 午夜久久久影院 | 国产亚洲精品久久久久久大师 | 六月丁香激情综合色啪小说 | 亚洲精品一区二区三区在线观看 | 日日夜夜av | 亚洲欧洲av | 日韩sese | 天天干天天在线 | 日韩视频免费在线 | 91精选| 日韩在线视频网址 | 2019中文最近的2019中文在线 | 久草在线资源观看 | 欧美a级成人淫片免费看 | 免费视频久久久 | 成人动漫一区二区三区 | 国产成人精品一二三区 | 日本中文乱码卡一卡二新区 | 国产不卡在线看 | 久操免费视频 | 日韩网站在线播放 | 久久久精品小视频 | 97久久精品午夜一区二区 | 久久福利剧场 | 久久久91精品国产一区二区精品 | 国产一卡久久电影永久 | 久久男人免费视频 | 欧美污污网站 | 免费观看成人 | 视频二区| 91一区在线观看 | 国产又粗又猛又爽又黄的视频免费 | 嫩嫩影院理论片 | 视频一区二区在线观看 | 免费国产在线精品 | 成人av一区二区在线观看 | av在线免费观看不卡 | 香蕉久久久久 | 国产视频精品视频 | 国产精品18久久久久久不卡孕妇 | 日韩亚洲在线视频 | 日日干视频| 99色网站 | 国产精品入口麻豆www | 看片黄网站 | 在线成人中文字幕 | 四虎小视频 | 五月婷社区 | 国产最新视频在线观看 | 91精品人成在线观看 | 国产成人精品久久亚洲高清不卡 | www.久久色 | 国产在线观看,日本 | 香蕉精品在线观看 | 中文字幕一区二区三区久久 | 国产精品美女视频网站 | 伊人宗合网 | 久久第四色 | 亚洲天堂激情 | 欧美精品久久久久久久久免 | 日韩亚洲国产精品 | 亚洲最大av在线播放 | 精品一区二区在线免费观看 | 成年人免费观看在线视频 | 久草久热 | 人人爱人人射 | 国产国语在线 | 欧美乱码精品一区二区 | 69国产精品成人在线播放 | 91在线精品观看 | 一区二区在线不卡 | 怡红院成人在线 | 欧美国产日韩中文 | 国产一级片一区二区三区 | 欧美国产不卡 | 国产成人久久av | 6080yy精品一区二区三区 | 国产一区二区在线免费视频 | 国产精品久久久久久久久毛片 | 婷婷黄色片 | 精品在线看 | 丁香婷婷激情五月 | 91在线公开视频 | 97成人精品视频在线播放 | 中文字幕在线一区观看 | 中文字幕在线播放一区二区 | 成人免费观看网站 | av在线播放国产 | 中文字幕二区三区 | 狠色在线| 国产免费激情久久 | 日韩黄色一区 | 日韩二级毛片 | 久青草视频 | 成人毛片在线观看视频 | 久久成人综合 | 成年人视频在线观看免费 | 天天操天天操天天操天天操天天操天天操 | 久草| 亚洲国产精品久久久久婷婷884 | 国产一区在线不卡 | 天天做夜夜做 | 深夜国产在线 | 天天干,天天草 | 美腿丝袜av | 中文字幕在线观看视频一区 | 国产九九九九九 | 97超碰在线久草超碰在线观看 | 高潮久久久 | 国产精品igao视频网网址 | 综合五月婷婷 | 视频99爱| 婷婷国产在线观看 | 国产视频一区二区在线播放 | 日韩三级在线观看 | 亚洲精品免费观看 | 国产高清免费观看 | 国产不卡精品 | www.色婷婷.com| 国产伦理剧 | 久久一区国产 | 婷婷电影在线观看 | 亚洲综合色婷婷 | 欧美午夜性生活 | 中文乱幕日产无线码1区 | 欧美精品v国产精品v日韩精品 | 国产精品久久艹 | 人人干干人人 | 日本中文字幕影院 | 日本中文字幕在线视频 | 免费在线成人av | 久久精品9| 亚洲精品在线观看免费 | 久久婷婷亚洲 | 国产一级黄色免费看 | 亚洲黄色av网址 | 精品少妇一区二区三区在线 | 国产成人久 | 69久久夜色精品国产69 | 国产永久免费高清在线观看视频 | 色婷婷丁香 | 国产一级在线看 | 一区二区精品在线 | 国产激情久久久 | 日日夜夜狠狠 | 四虎在线永久免费观看 | 精品96久久久久久中文字幕无 | 黄色三级网站在线观看 | 天天爽天天爽天天爽 | 国产主播99 | 成人黄色短片 | 欧美激情综合五月色丁香 | 狠狠操夜夜 | av天天在线观看 | 美女免费网站 | 久久不射网站 | 精品久久久久久久 | 激情开心色| 99久久精品免费看国产四区 | 亚洲狠狠干 | 亚洲综合成人专区片 | 五月激情av | 久草在线视频免费资源观看 | 黄色小网站免费看 | 丁香花在线视频观看免费 | 香蕉视频久久 | 亚欧日韩成人h片 | 91丨九色丨国产在线 | 午夜骚影| 国产精品亚洲成人 | 97超碰在线免费观看 | 干狠狠 | 日韩欧美在线视频一区二区 | 久99视频| 欧美激情视频一区 | 狠狠gao| 免费精品视频在线 | 精品五月天 | 国产一级性生活视频 | 99久久久国产精品免费观看 | 日本超碰在线 | 亚洲激情五月 | 午夜黄色影院 | 欧美日韩中文在线观看 | 亚洲精品视频在线免费 | 久久影视精品 | 国产婷婷一区二区 | 免费网站黄 | 精品国产一二三四区 | 中文字幕制服丝袜av久久 | 五月开心激情网 | 91视频 - 88av | 97成人精品视频在线观看 | 日日夜夜精品免费 | 国产精品久久久久久久7电影 | 日韩精品电影在线播放 | 国产99久久久国产精品 | 黄色免费电影网站 | 婷婷综合久久 | 69精品视频 | 国产在线不卡 | 成av人电影 | 天堂va欧美va亚洲va老司机 | 色噜噜狠狠狠狠色综合久不 | 久久婷婷一区 | 波多野结衣视频在线 | 久久综合狠狠综合 | 一区二区不卡在线观看 | 成人av影视在线 | 成人在线免费视频 | 91大片成人网 | 国产一区在线观看视频 | 夜色资源站国产www在线视频 | 精品一区二区电影 | 99热精品在线 | 天天爽夜夜爽人人爽曰av | 欧美日韩国产综合一区二区 | 欧美视频一区二 | 精品日本视频 | 天天综合网 天天综合色 | 国内精品久久久久久久久久久久 | 久久一级片 | 色欧美88888久久久久久影院 | 欧美精品免费视频 | 99久久夜色精品国产亚洲96 | 制服丝袜亚洲 | 欧美日韩另类在线观看 | 国语精品久久 | av3级在线| 激情av资源网 | 亚洲精品美女久久17c | 伊人热| 欧美a视频在线观看 | 婷婷丁香激情五月 | 91精品伦理 | 国产美女网站视频 | 91桃色国产在线播放 | av解说在线观看 | 在线观看网站av | 午夜成人影视 | 午夜久久福利影院 | 亚洲国产精品成人va在线观看 | 国产午夜精品久久久久久久久久 | 国产91免费在线 | 久草在线免费新视频 | 去干成人网 | 精品在线观看一区二区 | 欧美午夜寂寞影院 | 91精品国产欧美一区二区成人 | 精品美女久久久久 | 亚洲精品在线国产 | 99久久99热这里只有精品 | 国产精品久久一卡二卡 | 五月婷婷在线视频观看 | 五月天综合网 | 91漂亮少妇露脸在线播放 | www激情网 | 伊人春色电影网 | 免费试看一区 | 久久精品女人毛片国产 | 国产精品激情偷乱一区二区∴ | 日韩美女久久 | 久久精品视频在线观看 | 91精品久久久久久久久 | 国产精品视频最多的网站 | 国产中文字幕精品 | 91精品视频免费看 | 日韩久久久久 | 四虎影视成人精品国库在线观看 | 国产欧美高清 | 国产美女网站在线观看 | 免费h在线观看 | 麻豆精品视频在线观看免费 | 久久久电影| 国产精品久久久久久久久久白浆 | 色婷婷综合五月 | 免费三级骚 | 91麻豆国产福利在线观看 | 久久精品国产一区二区电影 | 欧美一区二区三区在线看 | 超碰97中文| 怡红院av久久久久久久 | 久久久久久片 | 黄污视频网站大全 | 涩涩网站免费 | 在线观看免费一区 | 黄色精品久久久 | 毛片美女网站 | 国产精品系列在线观看 | 久久精品免视看 | 四虎成人免费观看 | 亚洲黄a| 中文字幕在线观看免费高清电影 | 字幕网资源站中文字幕 | 免费福利在线观看 | 亚洲综合色丁香婷婷六月图片 | 96精品高清视频在线观看软件特色 | 久久蜜臀av | 91视频免费国产 | 国产精品久久婷婷六月丁香 | 六月久久婷婷 | 成人av免费电影 | 日日夜夜精品免费 | 99精品在线观看 | 亚洲人毛片 | 97超在线视频 | 日韩大片在线免费观看 | 香蕉视频4aa | 婷婷色5月| 国产 一区二区三区 在线 | 国产一区二区在线播放视频 | 国内免费久久久久久久久久久 | 亚洲一级电影视频 | 在线免费看片 | 亚洲最新精品 | 中文字幕一区二区三区在线播放 | 色婷婷九月 | 黄色三级免费 | 免费精品在线视频 | 在线免费观看亚洲视频 | 亚洲专区欧美专区 | 色爱成人网 | 91精品婷婷国产综合久久蝌蚪 | 五月婷婷在线观看 | 黄色av一区二区 | 中文字幕在线中文 | 国产精品一区二区免费 | 国产精品毛片一区二区 | 国产精品久久久久毛片大屁完整版 | 亚洲精品mv在线观看 | 日日插日日干 | 久草线 | 日韩av免费一区 | 色综合天天视频在线观看 | 国产二区视频在线观看 | 成片视频在线观看 | 日韩视频免费看 | 亚洲精品视频网址 | 国产又粗又猛又黄又爽的视频 | 国产精品五月天 | 国产精品久久久久久影院 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 在线观看 国产 | 九九九九九国产 | 国产精品久久久久久久久久久免费 | 好看av在线 | 又色又爽的网站 | 中文在线a√在线 | 国产综合91 | 欧美成人精品三级在线观看播放 | 在线影视 一区 二区 三区 | 探花视频在线版播放免费观看 | 国内99视频 | 91丨九色丨丝袜 | 91精品国产入口 | 精品中文字幕在线播放 | 黄色大全免费观看 | 99久在线精品99re8热视频 | 成人免费视频网 | 在线免费精品视频 | 91免费观看视频网站 | 中文字幕二区在线观看 | 激情综合站| 丁香九月婷婷综合 | 国产精品18久久久久久久 | 欧美 日韩 国产 成人 在线 | 蜜臀久久99精品久久久无需会员 | 国内精品久久久久久久影视简单 | 久久激情视频 | 99在线精品视频 | 中文字幕日韩电影 | 国产二区视频在线观看 | 成x99人av在线www | 日韩理论在线观看 | 天天碰天天操 | 丁香视频五月 | av.com在线| 天天躁日日躁狠狠躁av麻豆 | www久草| 日日碰狠狠添天天爽超碰97久久 | 免费看成年人 | 日韩高清一区在线 | 看片的网址 | 99久久婷婷国产综合亚洲 | 欧美日韩国产二区 | 在线观看日韩中文字幕 | 99在线视频免费观看 | 天天干,天天干 | 成人a免费 | 久久激五月天综合精品 | 久99久中文字幕在线 | 韩日精品中文字幕 | 国产美腿白丝袜足在线av | 成人影音在线 | 中文字幕在线看视频国产中文版 | 国产精品专区h在线观看 | 亚洲天堂视频在线 | 97精品视频在线 | 午夜色影院 | 亚洲va欧美va国产va黑人 | 国产美女无遮挡永久免费 | 国产福利精品在线观看 | 日批在线观看 | 国内精品在线观看视频 | 日韩一二区在线观看 | 狠狠色丁香婷婷综合最新地址 | 精品在线视频播放 | 97干com| 999视频网站| 国产美女网站在线观看 | 在线观看视频在线 | 亚洲香蕉视频 | 日b视频在线观看网址 | 色综合色综合色综合 | 黄色一级网 | 久久理论电影网 | 亚洲www天堂com | 国内成人精品视频 | 美腿丝袜一区二区三区 | 欧美日韩裸体免费视频 | 91视频在线播放视频 | 中文亚洲欧美日韩 | 91精品视频观看 | 怡红院av久久久久久久 | 国产高清视频网 | 欧美成人xxxx| 九九九在线 | 超碰99人人 | 国产小视频在线看 | 久久视频网址 | 久久综合五月天婷婷伊人 | 国产精品成人aaaaa网站 | 成人av网页 | 国产一级大片免费看 | 亚洲91精品在线观看 | 在线观看视频三级 | 狠狠色丁香久久婷婷综合五月 | 精品国产一区二区三区久久久蜜臀 | 黄色av电影一级片 | 成人看片| 亚洲综合激情五月 | 国产精品久久久久久久久婷婷 | 在线看日韩 | 黄色软件在线观看视频 | 成人免费视频网站 | 日韩中文字幕电影 | 91视频中文字幕 | 成人黄色在线电影 | 2023亚洲精品国偷拍自产在线 | 日韩欧美视频 | 日韩欧美综合在线视频 | 亚洲国产影院av久久久久 | 香蕉视频一级 | 成人免费 在线播放 | 久久久影视 | 丁香久久综合 | 人人插人人澡 | 视频在线91| 亚洲成av人片一区二区梦乃 | 亚洲 成人 欧美 | 日韩精品一区二区三区在线播放 | 97国产大学生情侣酒店的特点 | 欧美精彩视频在线观看 | www.夜夜爽 | 日韩特黄一级欧美毛片特黄 | 丁香九月激情 | 色福利网站 | 97在线观看 | 国产淫片免费看 | 免费观看黄色12片一级视频 | 久久国产三级 | 天天干天天操天天爱 | 超碰在线色 | 激情五月婷婷网 | 成人一区二区三区中文字幕 | 婷婷综合av| 久久久久久久久爱 | 中文字幕成人在线观看 | www.久久色| 欧美日韩亚洲第一页 | 高清久久久 | 美女搞黄国产视频网站 | 欧美性色19p | 有码视频在线观看 | 五月天综合激情 | 日韩免费福利 | 亚洲一区网站 | 超碰av在线免费观看 | 91在线免费视频观看 | 粉嫩av一区二区三区免费 | av日韩不卡| 中文字幕久久精品一区 |