国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C++策略模式:給行為裝上可插拔引擎的工業(yè)實(shí)踐

C++策略模式:給行為裝上可插拔引擎的工業(yè)實(shí)踐 1. 策略模式不是“換算法”而是給行為裝上可插拔的引擎剛接觸策略模式時(shí)我跟很多初學(xué)者一樣把它簡(jiǎn)單理解成“用if-else換成了多態(tài)調(diào)用”。直到在某高校實(shí)驗(yàn)室參與一個(gè)跨平臺(tái)圖像處理Demo開發(fā)時(shí)才真正踩進(jìn)坑里——當(dāng)時(shí)我們?yōu)橥唤M濾鏡效果寫了Windows版、Linux版和嵌入式ARM版三套實(shí)現(xiàn)每套都硬編碼了OpenCV、FFmpeg和自研輕量庫的調(diào)用邏輯。結(jié)果一次需求變更客戶要求新增“動(dòng)態(tài)模糊強(qiáng)度調(diào)節(jié)”功能且必須支持運(yùn)行時(shí)熱切換。我們花了整整三天改宏定義、重編譯、反復(fù)測(cè)試最后發(fā)現(xiàn)連日志輸出格式都不統(tǒng)一。那一刻我才意識(shí)到策略模式的核心壓根不是“怎么寫算法”而是把變化點(diǎn)封裝成獨(dú)立、可互換、有明確定義邊界的對(duì)象單元。它解決的從來不是“算法本身怎么寫”而是“當(dāng)算法要變、要換、要組合、要運(yùn)行時(shí)決定”的系統(tǒng)性問題。就像給一輛車裝引擎——你不會(huì)把發(fā)動(dòng)機(jī)焊死在底盤上而是設(shè)計(jì)標(biāo)準(zhǔn)接口曲軸法蘭、油路接口、ECU通信協(xié)議讓V6、電動(dòng)機(jī)、氫燃料模塊都能即插即用。策略模式就是給代碼里的“行為”裝上這套工業(yè)級(jí)接口標(biāo)準(zhǔn)。這個(gè)模式特別適合出現(xiàn)在四類場(chǎng)景中一是業(yè)務(wù)規(guī)則頻繁調(diào)整比如電商的滿減計(jì)算從“滿300減50”突然變成“滿300減50再送10元券”二是需要支持多種算法并存且用戶可選如文本編輯器的拼寫檢查引擎可切換基于詞典、基于NLP模型、基于用戶習(xí)慣的三種策略三是不同平臺(tái)/硬件需適配不同底層實(shí)現(xiàn)如剛才說的圖像處理GPU加速版、CPU純計(jì)算版、低功耗傳感器融合版四是測(cè)試驅(qū)動(dòng)開發(fā)中需快速替換模擬實(shí)現(xiàn)比如用MockNetworkStrategy替代真實(shí)HTTP請(qǐng)求繞過網(wǎng)絡(luò)依賴做單元測(cè)試。關(guān)鍵詞“C設(shè)計(jì)模式”“策略模式”“strategy pattern”背后實(shí)際指向的是C這門語言特有的能力邊界與工程約束它沒有Java的interface關(guān)鍵字不支持Python的鴨子類型但擁有虛函數(shù)表、模板特化、RAII資源管理等獨(dú)特武器。所以C中的策略模式絕不是照搬UML圖就能跑通的紙面方案而是一場(chǎng)在編譯期與運(yùn)行期之間、在內(nèi)存布局與接口抽象之間、在性能敏感與擴(kuò)展靈活之間做的精密權(quán)衡。接下來我會(huì)從設(shè)計(jì)思路、核心細(xì)節(jié)、實(shí)操實(shí)現(xiàn)到排錯(cuò)經(jīng)驗(yàn)一層層拆開這個(gè)看似簡(jiǎn)單、實(shí)則暗藏玄機(jī)的模式。2. 內(nèi)容整體設(shè)計(jì)與思路拆解為什么不用函數(shù)指針為什么拒絕模板全展開2.1 傳統(tǒng)方案的三大死穴硬編碼、耦合爆炸、測(cè)試失能在沒引入策略模式前我們團(tuán)隊(duì)最常用的方案是“函數(shù)指針數(shù)組枚舉開關(guān)”。比如圖像銳化功能會(huì)這樣寫enum class FilterType { Gaussian, Laplacian, UnsharpMask }; using FilterFunc void(*)(cv::Mat, double); FilterFunc filter_funcs[] { [](cv::Mat img, double sigma) { cv::GaussianBlur(img, img, cv::Size(0,0), sigma); }, [](cv::Mat img, double strength) { cv::Laplacian(img, img, CV_64F, 1, 1, 0, cv::BORDER_DEFAULT); }, [](cv::Mat img, double amount) { /* 實(shí)現(xiàn)unsharp mask */ } };表面看很簡(jiǎn)潔但實(shí)際埋了三個(gè)雷提示函數(shù)指針無法攜帶狀態(tài)。當(dāng)你需要記錄“當(dāng)前高斯模糊用了幾次”或“上次Laplacian的strength參數(shù)是多少”就得額外維護(hù)全局變量或傳參結(jié)構(gòu)體瞬間破壞封裝性。注意所有策略實(shí)現(xiàn)被強(qiáng)制塞進(jìn)同一個(gè)作用域。一旦某個(gè)策略需要引用第三方庫比如UnsharpMask要用到OpenEXR讀取HDR數(shù)據(jù)整個(gè)可執(zhí)行文件就得鏈接OpenEXR——哪怕99%的用戶只用GaussianBlur。這是典型的“牽一發(fā)而動(dòng)全身”。提示單元測(cè)試幾乎不可能。你想單獨(dú)測(cè)Laplacian策略得先構(gòu)造cv::Mat對(duì)象、準(zhǔn)備測(cè)試圖片、再調(diào)用filter_funcs[1]——而這個(gè)函數(shù)指針根本不知道自己是誰調(diào)試時(shí)gdb里顯示的只是內(nèi)存地址。2.2 策略模式的三層架構(gòu)接口抽象、實(shí)現(xiàn)分離、上下文解耦真正的策略模式在C中必須構(gòu)建三層結(jié)構(gòu)策略接口Strategy Interface用抽象基類定義行為契約。關(guān)鍵不是“有哪些方法”而是“哪些東西絕對(duì)不能出現(xiàn)在這里”。比如IImageFilter接口里絕不允許出現(xiàn)cv::Mat引用參數(shù)——因?yàn)檫@會(huì)把OpenCV綁定死。正確做法是定義process(const ImageData input, ImageData output)其中ImageData是自定義的輕量結(jié)構(gòu)體只含寬高、像素指針、格式枚舉。具體策略Concrete Strategy每個(gè)類只專注一件事。GaussianBlurStrategy只管高斯卷積核生成與應(yīng)用LaplacianStrategy只負(fù)責(zé)二階導(dǎo)數(shù)計(jì)算它們之間零依賴。更重要的是每個(gè)策略類可以自由選擇自己的依賴GaussianBlurStrategy鏈接OpenCVLaplacianStrategy用Eigen矩陣庫UnsharpMaskStrategy甚至用純C寫的SIMD匯編——只要它們都滿足IImageFilter接口外部就完全感知不到。上下文Context這是最容易被忽略的關(guān)鍵角色。它不持有策略的原始指針而是用std::unique_ptrIImageFilter管理生命周期它不直接調(diào)用策略方法而是提供applyFilter(const ImageData)這樣的語義化接口它甚至可以內(nèi)置策略工廠根據(jù)輸入數(shù)據(jù)特征如分辨率4K自動(dòng)選擇GPU加速策略。這種分層帶來的直接好處是當(dāng)客戶要求新增“AI超分策略”時(shí)你只需新建AISuperResStrategy類實(shí)現(xiàn)IImageFilter接口然后在上下文工廠里加一行注冊(cè)邏輯——零修改現(xiàn)有代碼零重新編譯主程序零影響其他策略。2.3 C特有陷阱虛函數(shù)表開銷 vs 模板靜態(tài)多態(tài)的取舍很多教程會(huì)告訴你“策略模式必須用虛函數(shù)”但這是對(duì)C的嚴(yán)重誤讀。我們做過實(shí)測(cè)在嵌入式ARM Cortex-A7上虛函數(shù)調(diào)用比普通函數(shù)調(diào)用慢12%-18%主要耗在vtable查表和間接跳轉(zhuǎn)上。而圖像處理這類性能敏感場(chǎng)景單幀處理可能調(diào)用策略數(shù)百次。于是我們嘗試了模板方案templatetypename Strategy class ImageProcessor { public: void process(const ImageData input, ImageData output) { Strategy{}.process(input, output); } };結(jié)果發(fā)現(xiàn)新問題編譯產(chǎn)物體積暴漲300%。因?yàn)槊總€(gè)Strategy模板實(shí)例都會(huì)生成一份完整代碼ImageProcessorGaussianBlurStrategy和ImageProcessorLaplacianStrategy完全獨(dú)立連日志函數(shù)都各自復(fù)制一份。最終我們采用混合方案接口層用虛函數(shù)保證運(yùn)行時(shí)靈活性核心計(jì)算層用模板內(nèi)聯(lián)優(yōu)化。比如GaussianBlurStrategy內(nèi)部用模板實(shí)現(xiàn)不同核尺寸的卷積class GaussianBlurStrategy : public IImageFilter { public: void process(const ImageData input, ImageData output) override { // 根據(jù)sigma值選擇最優(yōu)模板特化版本 if (sigma_ 1.0) gaussian_convolve3(input, output); else if (sigma_ 2.5) gaussian_convolve5(input, output); else gaussian_convolve7(input, output); } private: templateint KERNEL_SIZE void gaussian_convolve(const ImageData input, ImageData output) { // 編譯期展開的卷積循環(huán)無分支預(yù)測(cè)失敗 } double sigma_{1.0}; };這個(gè)設(shè)計(jì)讓虛函數(shù)調(diào)用只發(fā)生在策略切換的“決策點(diǎn)”而高頻計(jì)算路徑完全規(guī)避了動(dòng)態(tài)分派——這才是C工程師該有的精度控制。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)從頭手寫一個(gè)工業(yè)級(jí)策略框架3.1 接口設(shè)計(jì)的黃金三原則窄、穩(wěn)、可測(cè)IImageFilter接口的定義我們迭代了七版才定稿。第一版寫著virtual void execute(void* data, int size) 0;第二版改成virtual bool run(const cv::Mat src, cv::Mat dst) 0;……直到第七版才確立三條鐵律第一參數(shù)必須窄Narrow只傳遞策略真正需要的東西。ImageData結(jié)構(gòu)體最終精簡(jiǎn)為struct ImageData { uint8_t* pixels; // 像素起始地址 int width, height; // 寬高非cv::Size避免依賴OpenCV int stride; // 行字節(jié)數(shù)支持ROI和padding PixelFormat format; // 枚舉RGB888, RGBA8888, YUV420P... };注意堅(jiān)決不用std::vectoruint8_t或std::shared_ptr。前者帶來堆分配開銷后者增加引用計(jì)數(shù)——在實(shí)時(shí)視頻流處理中每毫秒都在和內(nèi)存帶寬賽跑。第二契約必須穩(wěn)Stable接口方法簽名一旦發(fā)布永遠(yuǎn)不改。我們約定所有策略必須在process()返回前完成全部?jī)?nèi)存操作絕不拋出異常用return false表示失敗且保證線程安全內(nèi)部用thread_local緩存臨時(shí)緩沖區(qū)。這意味著即使未來加入WebAssembly后端只要實(shí)現(xiàn)這個(gè)接口就能無縫接入現(xiàn)有系統(tǒng)。第三驗(yàn)證必須可測(cè)Testable接口必須自帶驗(yàn)證鉤子。我們?cè)贗ImageFilter中強(qiáng)制添加virtual std::string name() const 0; // 用于日志和UI顯示 virtual std::mapstd::string, std::string getParams() const 0; // 運(yùn)行時(shí)參數(shù)快照 virtual bool validate(const ImageData input) const 0; // 輸入合法性檢查這三個(gè)方法讓測(cè)試變得極其簡(jiǎn)單單元測(cè)試可以遍歷所有策略調(diào)用validate()檢查是否支持4K輸入用getParams()確認(rèn)默認(rèn)sigma1.0再用name()生成測(cè)試報(bào)告標(biāo)題。沒有這些你永遠(yuǎn)在猜“這個(gè)策略到底支不支持YUV格式”。3.2 具體策略的實(shí)現(xiàn)心法狀態(tài)隔離、資源自治、錯(cuò)誤降級(jí)以LaplacianStrategy為例它的實(shí)現(xiàn)遠(yuǎn)不止“調(diào)用cv::Laplacian”這么簡(jiǎn)單class LaplacianStrategy : public IImageFilter { public: LaplacianStrategy() { // 資源自治在構(gòu)造時(shí)預(yù)分配所有內(nèi)存 temp_buffer_.resize(1920 * 1080 * 4); // 最大支持1080p kernel_ generateLaplacianKernel(); // 預(yù)計(jì)算卷積核 } bool process(const ImageData input, ImageData output) override { // 狀態(tài)隔離每個(gè)調(diào)用都是干凈的不依賴上次結(jié)果 if (!validate(input)) return false; // 錯(cuò)誤降級(jí)當(dāng)輸入超出預(yù)分配緩沖區(qū)自動(dòng)切到安全模式 if (input.width * input.height temp_buffer_.size() / 4) { return processSafeMode(input, output); } // 核心計(jì)算使用預(yù)分配緩沖區(qū)零堆分配 applyLaplacian(input, output, temp_buffer_.data(), kernel_); return true; } private: std::vectorfloat temp_buffer_; // thread_local? 不每個(gè)實(shí)例獨(dú)占 std::arrayfloat, 9 kernel_; // 3x3拉普拉斯核constexpr生成 bool processSafeMode(const ImageData input, ImageData output) { // 分塊處理把大圖切成128x128小塊逐塊處理 // 即使內(nèi)存緊張也能完成只是速度慢30% return true; } };這里藏著三個(gè)關(guān)鍵設(shè)計(jì)決策資源自治構(gòu)造函數(shù)就完成所有內(nèi)存分配。避免在process()里new/malloc——這對(duì)實(shí)時(shí)系統(tǒng)是致命的內(nèi)存碎片會(huì)讓延遲抖動(dòng)不可控。狀態(tài)隔離不使用static變量或全局緩存。每個(gè)LaplacianStrategy實(shí)例都是獨(dú)立的可以安全地在多線程中并行調(diào)用甚至能放進(jìn)std::vector容器里批量管理。錯(cuò)誤降級(jí)processSafeMode()不是擺設(shè)。當(dāng)客戶在手機(jī)端上傳20MB的RAW照片時(shí)這個(gè)降級(jí)路徑能防止OOM崩潰用可接受的性能損失換取系統(tǒng)穩(wěn)定性——這才是工業(yè)級(jí)代碼的思維。3.3 上下文Context的隱藏藝術(shù)不只是策略容器很多人把Context寫成一個(gè)簡(jiǎn)單的策略指針包裝器這是最大的浪費(fèi)。真正的上下文應(yīng)該成為策略的“智能管家”class ImageProcessorContext { public: // 工廠模式根據(jù)輸入特征自動(dòng)選擇策略 void selectStrategy(const ImageData input) { if (input.format PixelFormat::YUV420P isHardwareAccelerated()) { setStrategy(std::make_uniqueHardwareLaplacianStrategy()); } else if (input.width * input.height 1920*1080) { setStrategy(std::make_uniqueMultiScaleGaussianStrategy()); } else { setStrategy(std::make_uniqueGaussianBlurStrategy()); } } // 策略鏈?zhǔn)秸{(diào)用支持多個(gè)策略串聯(lián)如先高斯模糊再邊緣檢測(cè) void addPostProcessor(std::unique_ptrIImageFilter post) { post_processors_.push_back(std::move(post)); } // 統(tǒng)一日志與監(jiān)控 bool process(const ImageData input, ImageData output) { auto start std::chrono::high_resolution_clock::now(); bool success strategy_-process(input, output); // 記錄耗時(shí)、策略名稱、輸入尺寸供性能分析 logProcessingTime(start, strategy_-name(), input.width * input.height); // 自動(dòng)應(yīng)用后處理器 for (auto post : post_processors_) { post-process(output, output); } return success; } private: std::unique_ptrIImageFilter strategy_; std::vectorstd::unique_ptrIImageFilter post_processors_; };這個(gè)上下文實(shí)現(xiàn)了三個(gè)超越教科書的功能智能路由不再是用戶手動(dòng)選策略而是根據(jù)輸入數(shù)據(jù)特征格式、尺寸、設(shè)備能力自動(dòng)決策。這已經(jīng)接近微服務(wù)的API網(wǎng)關(guān)邏輯。策略編排支持addPostProcessor()讓策略可以像Unix管道一樣組合。比如GaussianBlurStrategy | EdgeDetectStrategy | ContrastEnhanceStrategy形成圖像處理流水線??捎^測(cè)性注入logProcessingTime()不是簡(jiǎn)單打日志而是把數(shù)據(jù)推送到內(nèi)部監(jiān)控系統(tǒng)當(dāng)某個(gè)策略平均耗時(shí)突增200%運(yùn)維告警立刻觸發(fā)——這才是現(xiàn)代C系統(tǒng)的標(biāo)配。4. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)從零搭建可運(yùn)行的策略系統(tǒng)4.1 第一步創(chuàng)建策略接口與基礎(chǔ)設(shè)施我們從最精簡(jiǎn)的骨架開始確保編譯通過再逐步增強(qiáng)// strategy_interface.h #pragma once #include string #include map // 像素格式枚舉完全脫離第三方庫 enum class PixelFormat { UNKNOWN, RGB888, RGBA8888, YUV420P, GRAY8 }; // 圖像數(shù)據(jù)結(jié)構(gòu)體POD類型零開銷抽象 struct ImageData { unsigned char* pixels{nullptr}; int width{0}, height{0}; int stride{0}; // 每行字節(jié)數(shù)支持padding PixelFormat format{PixelFormat::UNKNOWN}; }; // 策略接口基類 class IImageFilter { public: virtual ~IImageFilter() default; // 必須有虛析構(gòu) // 核心行為處理圖像 virtual bool process(const ImageData input, ImageData output) 0; // 元信息用于日志、UI、測(cè)試 virtual std::string name() const 0; virtual std::mapstd::string, std::string getParams() const 0; virtual bool validate(const ImageData input) const 0; };注意virtual ~IImageFilter() default;這行絕不能省。C中通過基類指針刪除派生類對(duì)象時(shí)若基類析構(gòu)函數(shù)非虛會(huì)導(dǎo)致派生類部分內(nèi)存泄漏——這是C新手十大死亡陷阱之一。4.2 第二步實(shí)現(xiàn)第一個(gè)具體策略——高斯模糊我們選擇高斯模糊作為首個(gè)策略因?yàn)樗銐虻湫颓夷鼙┞蛾P(guān)鍵問題// gaussian_blur_strategy.h #pragma once #include strategy_interface.h #include vector #include cmath class GaussianBlurStrategy : public IImageFilter { public: explicit GaussianBlurStrategy(double sigma 1.0) : sigma_(sigma) { // 預(yù)計(jì)算高斯核避免每次process都算 kernel_size_ static_castint(std::ceil(3.0 * sigma_)) * 2 1; generateGaussianKernel(); } bool process(const ImageData input, ImageData output) override { if (!validate(input)) return false; // 輸入輸出必須同尺寸同格式 if (input.width ! output.width || input.height ! output.height || input.format ! output.format) { return false; } // 確保輸出緩沖區(qū)足夠大 const size_t required_size input.stride * input.height; if (output.pixels nullptr || (output.pixels required_size) output.pixels) { return false; } // 執(zhí)行卷積簡(jiǎn)化版實(shí)際項(xiàng)目用分離卷積優(yōu)化 applyGaussianConvolution(input, output); return true; } std::string name() const override { return GaussianBlur; } std::mapstd::string, std::string getParams() const override { return {{sigma, std::to_string(sigma_)}, {kernel_size, std::to_string(kernel_size_)}}; } bool validate(const ImageData input) const override { return input.pixels ! nullptr input.width 0 input.height 0 input.format PixelFormat::RGB888; // 僅支持RGB888 } private: void generateGaussianKernel() { kernel_.clear(); const double center kernel_size_ / 2.0; double sum 0.0; for (int i 0; i kernel_size_; i) { double x i - center; double value std::exp(-(x*x) / (2.0 * sigma_ * sigma_)); kernel_.push_back(value); sum value; } // 歸一化 for (auto v : kernel_) v / sum; } void applyGaussianConvolution(const ImageData input, ImageData output) { // 簡(jiǎn)化實(shí)現(xiàn)只做水平方向一維卷積實(shí)際應(yīng)分離為水平垂直 for (int y 0; y input.height; y) { for (int x 0; x input.width; x) { double sum_r 0.0, sum_g 0.0, sum_b 0.0; for (int k 0; k kernel_size_; k) { int src_x std::max(0, std::min(input.width - 1, x k - kernel_size_/2)); int idx y * input.stride src_x * 3; sum_r input.pixels[idx 0] * kernel_[k]; sum_g input.pixels[idx 1] * kernel_[k]; sum_b input.pixels[idx 2] * kernel_[k]; } int out_idx y * output.stride x * 3; output.pixels[out_idx 0] static_castunsigned char(sum_r); output.pixels[out_idx 1] static_castunsigned char(sum_g); output.pixels[out_idx 2] static_castunsigned char(sum_b); } } } double sigma_; int kernel_size_; std::vectordouble kernel_; };這段代碼已具備工業(yè)級(jí)策略的所有要素資源預(yù)分配kernel_在構(gòu)造時(shí)生成、狀態(tài)隔離無static成員、錯(cuò)誤防御validate()檢查空指針和尺寸、可測(cè)試性getParams()返回當(dāng)前sigma值。編譯它需要C17標(biāo)準(zhǔn)std::optional未用但std::vector初始化已足夠。4.3 第三步構(gòu)建上下文與策略工廠現(xiàn)在讓策略活起來創(chuàng)建ImageProcessorContext// image_processor_context.h #pragma once #include strategy_interface.h #include memory #include vector #include functional #include chrono class ImageProcessorContext { public: // 顯式設(shè)置策略 void setStrategy(std::unique_ptrIImageFilter strategy) { strategy_ std::move(strategy); } // 策略工廠根據(jù)名稱創(chuàng)建策略支持運(yùn)行時(shí)配置 bool createStrategy(const std::string name, const std::mapstd::string, std::string params) { if (name GaussianBlur) { double sigma 1.0; auto it params.find(sigma); if (it ! params.end()) sigma std::stod(it-second); setStrategy(std::make_uniqueGaussianBlurStrategy(sigma)); return true; } return false; } // 主處理入口 bool process(const ImageData input, ImageData output) { if (!strategy_) return false; auto start std::chrono::high_resolution_clock::now(); bool result strategy_-process(input, output); auto end std::chrono::high_resolution_clock::now(); // 性能日志實(shí)際項(xiàng)目中發(fā)送到監(jiān)控系統(tǒng) auto duration std::chrono::duration_caststd::chrono::microseconds(end - start); printf([Strategy:%s] Processed %dx%d in %ld us\n, strategy_-name().c_str(), input.width, input.height, duration.count()); return result; } private: std::unique_ptrIImageFilter strategy_; }; // 使用示例main.cpp #include image_processor_context.h #include gaussian_blur_strategy.h #include vector #include iostream int main() { // 準(zhǔn)備測(cè)試圖像數(shù)據(jù)模擬100x100 RGB圖像 std::vectorunsigned char test_data(100 * 100 * 3, 128); ImageData input{test_data.data(), 100, 100, 100 * 3, PixelFormat::RGB888}; std::vectorunsigned char output_data(100 * 100 * 3, 0); ImageData output{output_data.data(), 100, 100, 100 * 3, PixelFormat::RGB888}; // 創(chuàng)建上下文并設(shè)置策略 ImageProcessorContext context; context.setStrategy(std::make_uniqueGaussianBlurStrategy(1.5)); // 執(zhí)行處理 bool success context.process(input, output); std::cout Process result: (success ? OK : FAILED) std::endl; return 0; }編譯命令Linux/macOSg -stdc17 -O2 main.cpp -o strategy_demo ./strategy_demo你會(huì)看到輸出[Strategy:GaussianBlur] Processed 100x100 in 1245 us Process result: OK這就是一個(gè)可運(yùn)行、可測(cè)試、可擴(kuò)展的策略模式最小可行系統(tǒng)。所有代碼不依賴任何第三方庫純C標(biāo)準(zhǔn)庫可在嵌入式環(huán)境、桌面應(yīng)用、服務(wù)器后臺(tái)任意部署。4.4 第四步策略注冊(cè)中心與運(yùn)行時(shí)熱切換當(dāng)策略數(shù)量超過5個(gè)手動(dòng)createStrategy()就太原始了。我們引入策略注冊(cè)中心// strategy_registry.h #pragma once #include strategy_interface.h #include memory #include string #include unordered_map #include functional class StrategyRegistry { public: // 注冊(cè)策略創(chuàng)建器 templatetypename T static void registerStrategy(const std::string name) { creators_[name] []() - std::unique_ptrIImageFilter { return std::make_uniqueT(); }; } // 創(chuàng)建策略實(shí)例 static std::unique_ptrIImageFilter create(const std::string name) { auto it creators_.find(name); if (it ! creators_.end()) { return it-second(); } return nullptr; } private: static std::unordered_mapstd::string, std::functionstd::unique_ptrIImageFilter() creators_; }; // 靜態(tài)成員定義 std::unordered_mapstd::string, std::functionstd::unique_ptrIImageFilter() StrategyRegistry::creators_; // 在main.cpp中注冊(cè)所有策略 #include strategy_registry.h #include gaussian_blur_strategy.h #include laplacian_strategy.h int main() { // 一次性注冊(cè)所有策略 StrategyRegistry::registerStrategyGaussianBlurStrategy(GaussianBlur); StrategyRegistry::registerStrategyLaplacianStrategy(Laplacian); // 運(yùn)行時(shí)熱切換 auto context std::make_uniqueImageProcessorContext(); context-setStrategy(StrategyRegistry::create(GaussianBlur)); // 處理完后切換到Laplacian context-setStrategy(StrategyRegistry::create(Laplacian)); }這個(gè)注冊(cè)中心讓策略徹底解耦新增策略只需在啟動(dòng)時(shí)調(diào)用registerStrategyT()無需修改任何已有代碼。更進(jìn)一步你可以把策略名存在配置文件里程序啟動(dòng)時(shí)自動(dòng)加載——這就實(shí)現(xiàn)了真正的“配置即代碼”。5. 常見問題與排查技巧實(shí)錄那些文檔里絕不會(huì)寫的坑5.1 問題速查表從崩潰到卡頓的12個(gè)典型故障故障現(xiàn)象可能原因排查命令/技巧解決方案程序啟動(dòng)即崩潰SIGSEGVIImageFilter析構(gòu)函數(shù)非虛派生類對(duì)象被基類指針刪除gdb ./app core→bt看棧幀檢查析構(gòu)調(diào)用點(diǎn)立即添加virtual ~IImageFilter() default;處理結(jié)果全黑/全白ImageData::stride計(jì)算錯(cuò)誤導(dǎo)致內(nèi)存越界寫入valgrind --toolmemcheck ./app檢查非法內(nèi)存訪問用input.width * bytes_per_pixel校驗(yàn)stride是否足夠多線程下結(jié)果隨機(jī)錯(cuò)誤策略類使用static局部變量緩存中間結(jié)果gdb ./app -p pid→info threads→thread apply all bt改用thread_local或每個(gè)實(shí)例獨(dú)占緩沖區(qū)編譯報(bào)錯(cuò)“undefined reference to vtable”抽象基類有純虛函數(shù)但未定義~IImageFilter()nm -C your_object.ogrep IImageFilter看符號(hào)策略切換后性能暴跌新策略未預(yù)分配內(nèi)存process()中頻繁new/mallocperf record -e syscalls:sys_enter_mmap ./app在構(gòu)造函數(shù)中預(yù)分配所有所需內(nèi)存日志顯示策略名為空name()返回局部字符串變量如return xxxgdb中p strategy_-name()看返回地址返回static const std::string或const char*validate()始終返回falseImageData::format枚舉值未正確初始化printf(format%d\n, input.format)打印原始值檢查枚舉賦值避免未初始化的PixelFormat::UNKNOWNARM平臺(tái)浮點(diǎn)計(jì)算結(jié)果不一致double在ARM上默認(rèn)用軟浮點(diǎn)x86用硬浮點(diǎn)readelf -A your_binary檢查Tag_ABI_VFP_args統(tǒng)一編譯選項(xiàng)-mfloat-abihard或改用float策略鏈?zhǔn)秸{(diào)用后圖像偏移后處理器修改了output的stride但未同步更新在每個(gè)process()后assert(output.stride input.stride)所有策略必須保證輸入輸出stride不變內(nèi)存占用隨處理次數(shù)線性增長(zhǎng)temp_buffer_在process()中重復(fù)resize()而非復(fù)用pmap -x pid看RSS內(nèi)存增長(zhǎng)趨勢(shì)預(yù)分配最大尺寸process()中只用clear()不resize()GDB調(diào)試時(shí)看不到策略類型編譯未開啟調(diào)試信息或優(yōu)化級(jí)別過高g -g -O0重新編譯生產(chǎn)環(huán)境用-g1保留基本符號(hào)調(diào)試用-g3跨DLL/so策略加載失敗Windows DLL導(dǎo)出符號(hào)未修飾Linux so未加__attribute__((visibility(default)))objdump -t your_lib.so | grep processWindows加__declspec(dllexport)Linux加可見性屬性5.2 實(shí)操心得五年踩坑總結(jié)的7條軍規(guī)軍規(guī)1永遠(yuǎn)用std::unique_ptr禁用裸指針管理策略我曾在一個(gè)醫(yī)療影像系統(tǒng)中用IImageFilter*存儲(chǔ)策略結(jié)果因異常拋出導(dǎo)致指針未釋放連續(xù)運(yùn)行72小時(shí)后內(nèi)存泄漏2GB。std::unique_ptr的RAII機(jī)制是C對(duì)抗內(nèi)存泄漏的終極武器——它不依賴程序員的自覺而是由編譯器強(qiáng)制保障。軍規(guī)2策略類禁止繼承只允許實(shí)現(xiàn)接口有同事試圖讓GaussianBlurStrategy繼承BaseImageFilter再讓BaseImageFilter繼承IImageFilter。結(jié)果BaseImageFilter里加了個(gè)virtual void init()所有派生類被迫重寫。記住策略模式的擴(kuò)展性來自“實(shí)現(xiàn)接口”不是“繼承基類”。接口越薄擴(kuò)展越自由。軍規(guī)3所有process()方法必須是const正確的bool process(const ImageData input, ImageData output) const——這個(gè)const不是裝飾。它向調(diào)用者承諾此方法絕不會(huì)修改策略自身狀態(tài)。這讓你能安全地把策略實(shí)例放進(jìn)std::vector甚至用const引用傳遞避免意外修改。軍規(guī)4用constexpr生成所有靜態(tài)數(shù)據(jù)拒絕運(yùn)行時(shí)計(jì)算高斯核、卷積權(quán)重、查找表……一切能在編譯期確定的必須用constexpr。我們?cè)裧enerateGaussianKernel()改為constexpr函數(shù)編譯后.text段減少1.2KB啟動(dòng)時(shí)間快8ms——在嵌入式設(shè)備上這就是生死之差。軍規(guī)5為每個(gè)策略編寫“壓力測(cè)試樁”不要等集成測(cè)試才發(fā)現(xiàn)問題。為GaussianBlurStrategy寫一個(gè)stress_test_gaussian.cpp用std::chrono::steady_clock循環(huán)調(diào)用process()10萬次監(jiān)控內(nèi)存峰值和CPU占用。真正的穩(wěn)定性是在百萬次調(diào)用中不崩一次。軍規(guī)6策略的validate()必須覆蓋100%邊界條件我們的validate()檢查包括pixels!nullptr、width0 height0、stridewidth*bytes_per_pixel、format在有效范圍內(nèi)、input和output格式兼容。少一條上線后就可能收到客戶“上傳照片就閃退”的投訴。軍規(guī)7日志中必須包含策略的getParams()快照當(dāng)線上系統(tǒng)報(bào)警“Laplacian處理耗時(shí)突增”運(yùn)維人員第一眼看到的應(yīng)該是[Laplacian] strength5.0, kernel_size7, input_size3840x2160。沒有參數(shù)快照的日志等于沒有日志。5.3 性能調(diào)優(yōu)實(shí)戰(zhàn)從23ms到1.8ms的七次迭代在某跨平臺(tái)圖像處理Demo中GaussianBlurStrategy初始版本處理1080p圖像耗時(shí)23ms。我們通過七次精準(zhǔn)優(yōu)化壓到1.8ms第一次消除動(dòng)態(tài)內(nèi)存分配原代碼在process()中std::vectordouble kernel(25)改為構(gòu)造函數(shù)預(yù)分配kernel_成員。效果-3.2ms第二次用float替代double高斯核計(jì)算用float精度足夠ARM NEON指令對(duì)float支持更好。效果-2.1ms第三次分離卷積將二維卷積拆為水平垂直兩次一維卷積復(fù)雜度從O(n?)降到O(n3)。效果-6.5ms第四次SIMD向量化用ARM NEON intrinsic重寫內(nèi)層循環(huán)一次處理4個(gè)像素。效果-4.3ms第五次緩存友好訪問調(diào)整內(nèi)存訪問順序讓CPU預(yù)取器能連續(xù)讀取。效果-2.7ms第六次分支預(yù)測(cè)優(yōu)化將if (x 0) x 0; else if (x width) x width-1;改為x std::clamp(x, 0, width-1)利用CPU分支預(yù)測(cè)器。效果-1.9ms第七次編譯器提示添加[[likely]]屬性標(biāo)記正常流程[[unlikely]]標(biāo)記錯(cuò)誤處理。效果-0.5ms最終代碼片段// 優(yōu)化后的卷積內(nèi)核ARM64 void applyGaussianHorizontal(const ImageData input, ImageData output
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本成人A片免费看| 97超视频在线观看| 91熟女网| 人妻熟女av国产网站| 中文字幕日本久久| 天天搞欧美| 亚瑟国产精品久久无码| 久久亚洲不卡一区二区三区| 男人的天堂 在线一区| 韩国一级婬片A片AAAAA| www被窝色com| 神马久久久久久伦理片| 日本幼女18+| 欧美最大综合网| 日韩精品人妻| 国产女上位好爽在线| 伊人宅男大香蕉| 欧美1区二区三区公司| 久9久9精品| 国内毛片热久久思思热| 9 7超碰在线免费观看| 久操免费在线| 国产白领连续中出在线观看| 97爱综合| 色五月综合网| 婷婷人妻激情| 一牛影视久久久一区二区三区| 97综合| a网站免费观看| 欧美综合天堂| 天天干2区3区| 97啪啪| 欧美专利1区2区3区4区5区免费| 啊啊啊操死我| 四虎国产成人精品免费一女五男| 日韩一区二区精彩视频| 精品小视频在线| 国产在线观看91精品一区| 一区=区三区视频| 欧美国产精品久久九九| 欲香欲色天天天综合和网| 午夜男人av| 九九九九一级| 综合久久婷婷| 亚洲中字幕日本一区二区三区 | 日韩欧美麻豆| 97人人干| 又大又大又大又粗爽高潮观看| 色哟哟国产精品免费网址| 天天日天天干少妇日| 亚洲91少妇| 欧美日韩插逼视频| 无码九九| 久久这里都是精品| 久久久久久久亚洲Av无码| 99这里都是精品| 久久鲁干| 狠狠干91| 日韩天天本| 欧美精品自慰系列寂寞少妇| 欧美爱爱97| 成人综合网 欧美| 国产99精品一区二区三区免费| 亚洲综合一| 97av在线视频| 亚洲精品毛片在线观看| 久久久性少妇| 台湾肥佬网一区二区三区| 亚欧成人中文字幕一区| 欧美日韩在线小说| 中文字幕女同在线| 91狠狠综合久久久久久| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 亚洲第一无码播放立川理惠| 欧美色图91| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 国产日韩中文字幕欧美| 中文字幕国产精品1区| 久草网站免费在线观看| 97久久国产| 色香伊人| 欧美一二三区四五区| 操高情无码| 欧美日韩插逼视频| 青青草原成人| 97中文字幕色| 亚洲色综合| www.伪伪| 欧美性天天| 欧美激情 一区| 情色日播放AV| 女人被添高潮免费视频| 欧美日韩香蕉| 9国产超碰| www.人人摸在线视频| 亚洲中文字幕有码视频一区二区三区| 97人人模人人爽人人| 国产肏逼网站| 男人天堂导航| 亚洲怡春院| 日韩av熟女一区二区三区成人| 性色av网站| a片偷拍视频| 国产深夜福利| 99热精品在线观看| 亚欧美色图| 后入式在线免费观看60秒| 国产无马av| 国产51色综合久久免费| 国产精品久久久久久亚洲色欲| 欧美在线|亚洲| 很很很很操| 国产视频一区二区在线观看| 亚洲图片欧美日韩| 日韩精品一区二区三区色欲| 亚洲综合中文字幕有码| 午夜福利在线合集| 国产无码高清操逼视频| 91精品人| 日韩精品人妻| 亚洲av噜噜噜噜噜噜| 91精品国产一区三一| 欧美综合自拍亚洲综合图| 人妻免费观看| 91色亚洲| 欧美后入| 亚洲中文字幕av| 97精品国产精品免费观看| 97激情97激情| 中文字幕在线免费观看2| 麻豆天美AV传媒第一页| 偷拍2020| 久热这里只有精品9| 97超级色碰碰| 老熟女综合网| 欧美偷拍| 97Ai亚洲| 人妻少妇精品无码专区二区密桃| 1204人成网站色www| 精品中文日韩字幕视频| 超碰97极品9| 色欧美在线| 久久久九九| 欧美中文字幕一区| 91国产在线精品| 老司机午夜福利视频一区二区| 久久亚洲不卡一区二区三区 | 青青草色情网站视频| 色九月综合| 国产污视频麻豆传媒一区二区| 9999伦理视频| 久久久成人免费av电影| 东北老熟女| 超碰一区二区| 熟妇人妻精品一区二区| 性videos欧美熟妇hdx| 亚洲综合另类小说色区亚洲成av人片在www| 日韩综合无码一区久久92| 中文字幕精品亚洲熟女| 亚洲欧美综合| 2018天天日天天日| 久操精品网| 天天干,夜夜爽| 91大学精品激情戏| 97免费免费视频网| 中文字幕免费在线观看| 91色花堂| 大香蕉www.超碰| 黄色av片三级三级三级免费看| 国产福利小视频高清在线观看| 成人性爱电影一区二区| 大香蕉亚洲中文| 欧美成人精品一区二区三区| 啊啊啊不要啊啊受不了了视频在线| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 九九九精品美女| 一中国女人毛片水真多| 黄色AAAAA欧美| A片三级无码| 日本大片日本一区二区免费高清 | 无套后入双马尾| 毛片久久| 日本在线激情一区二区三区| 九九成人视频| 黄色十八禁| 亚洲少妇综合| 成人av性爱电影在线观看| 亚洲av影院在线观看| 九九99久久| 91撸色网 玖玖网 欧美| 操一对老熟妇爽上天视频| 狠狠婷婷亚洲中文综合久久| 欧美日韩性爱操大逼| 日本在线不卡123| 日韩在线观看AV| 韩国三级一线观看久| 乱伦AVxx| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 欧美网站免费| av72网| 色臀AV| 久久性爱网站| 91/欧美| 91丝袜| 另类 日韩 熟女| 久久久久久久极品香蕉视频| 97丝袜亚洲在线播放| 色噜噜狠狠色综无码久久合欧美| 最新日韩黄片| 日韩精品人妻中文字有码在线| 韩国三级色呦呦| 日韩在线观看字幕精品| 99色骚| 欧美加勒比| 国产一区二区三区精品观看啪| 九九拍拍精品视频在线播放 | 五月丁香激情四射| 人妻少妇久久久| 九九九九一级| av三级电影在线播放| 超碰99在线观看| 一区二区视频你懂的| 大象AV在线| 午夜免费视频1000| 99re6在线视频播放免费精品| 操逼操逼逼操操逼91| 国产精品天干天干综合网麻豆| JIZZJIZZ亚洲女人被躁| 色性欧美| 丝袜美腿av女优在线| 丰满人妻av一区二区三区| 亚州色图欧美| 激情一区二区| 亚洲AV无码天美传媒一区| 美女爽到高潮91| 国产亚洲中文不卡二区| 欧美日韩青操| 17c在线成人免费A片观看| 91美女丝袜诱惑视频| 中文字幕黄色一起草| 国模吧 一区二区三区| 视频在线中文字幕| 国产亚洲精品美女久久久m| 人人噜夜夜操| 国产黄片精品在线| 日夜尻逼网| 亚洲最新a在线观看| 任你干在线视频| 日本一区二区三区午夜观看| 老师充足的奶水小说| 性videos欧美熟妇hdx| 四虎影库国产精品免费| 91丨九色丨国产丨人妻在线| 亚洲精品久久一区二区三区蜜桃臀| 很黄很色的视频在线观看| 91草草草| 国产女人成人精品视频| 日韩97P| 日韩国产品视频中文字| 日本免费一级AAA大片器| 超碰天天久久79| 国产高清无码一区三区二区| 超碰在线1234区| 九九性爱网| 97精品全部| 亚洲.欧美.丝袜.中文.综合| 日韩大香蕉| 麻豆天美久久91| 亚洲天堂加勒比| 97蜜桃综合| 强奸抽插av| 白 大 人妻 区 在线| 人人操人人摸人人看人人干| 国产九九九九九九| 久久精品视频久久久| 男人天堂黄片| 亚洲中字慕不卡| 久久一二三四五六七八九区区区| 亚洲97成人在线观看| 殴洲老熟女| 在线啊v一区| 色五月av| 国产精品午夜精品| 爱爱动态120秒| 国产黄色在线播放观看| 超碰 国产熟女精品一区| 国产一区二区三区影片| 操婢日韩| 欧美综合色图网| 九九九久千久久激情蜜桃在线看 | 亚洲久久久久| 中文久久96| 97人妻碰碰中文无码久热丝袜| 夜夜爽夜夜爽| 人妻喷水| 97中文字幕色| 国产www色在线观看| 91人妻在线视频| 在线观看视频91| 可以看的av| 久久久久久久伊人精品| 天天干嫩逼网| 久操视频免费观看| 台欧久久精品视频| 色欧美天天| 国产一级作爱毛片| 欧美日韩大香蕉| 国产自偷| 9久久美女首页| 99热精品在线观看| 免费在线观看国内色片网站网址| 精品人妻中文字幕高清| 婷婷8月天青娱乐| 午夜精品久久久久久久99热影院| 久久性爱视频| 爱av免费| 6080YYY午夜理论片在线观看| 国产精品久久久久久久久久久久久久| 好湿好紧好爽 视频| 麻豆啪啪啪视频| 久久久国产av美女私房| 综合网 欧美| 欧美第二页午夜| 亚洲 se图 欧美电影| 偷拍视频青青草在线视频| 亚洲图片 激情小说| 九九九九久久久| 柠檬AV导航| 夜夜影视四色| 性久久| 青春草莓视频在线观看网址| 国产精品久久久久9999小说| 久久国产999| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 蜜桃久久久久久| 婷婷激情五月| 婷婷亚洲综合| 欧美日韩性爱视屏免费看了| 欧美精品自慰系列寂寞少妇 | 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 操逼视频色| 日韩一级欧美一级国产一级台湾| 九九热三级片| 九九九九九九九九九国产精品 | 懂色AV蜜臀无码精品APP| 大香蕉一区二区在线观看.| 精品九九| 男插女青青影院| 中国人高清www色视频免费| 国产乱不卡| 破处bbq| 啊啊啊啊嗯嗯在线久久久| 欧美亚洲韩国视频十五区| 激情小说亚洲视频| 亚洲极品| 日韩欧美麻豆| 欧美日韩传媒| 试看60秒 爽| 亚洲97在线| 亚洲日韩天堂| 无码外流操逼视频| 被男人添B超爽视频| 欧美黄色大片在线观看| 久久精品国产亚洲AV高清演员表| 国产精品嫩草影院免费| 久久久久久久国产a∨| 欧美性爱视频免费一区一A| 国产成人bd在线观看| 午夜久久无码1000合集| 欧洲色| 禁片 高清 在线观看视频网站| 天天日少妇逼AV| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 人人妻人人澡人人爽久久av| 欧美激情视频在线一区| 久久91精品国产9丨久久分亭| 亚洲精品无码成人久久久99| 极品色www影院| 丁香婷婷色五月| 亚洲有薄码区日本系列中文字幕| 中文字幕 av v| 96爱综合| 天天爽入口| 久久中文字幕人妻熟av女蜜柚| 国产精品熟女一区二区三区| 亚洲欧美日韩免费电影| 97香蕉碰碰人妻国产欧美| 狠狠操夜夜操蜜桃视频三区| 亚洲国产精品久久久男人的天堂| 国产深喉| 精品无码久久久久久久久果冻糖心| 一级人妻性爱视频| 午夜精品久久久久久久99蜜桃一| 91丝袜美女国产| 精彩国产视频播放1区2区| 青青伊人加勒比海| 精品九九九九| 天堂中文日本在线观看| 97人妻色| 大屁股国产在线视频| 成人小电影网站tex| 久久精品 六十路 熟女 欧美| 日韩精品在线观看观看| 国产精品久久久久久 百度| 99热99re超碰精品| 中字一区| 人人操人人93| 亚洲欧美中文日韩视频中国语| 美中韩AV综合网| AV色图| 97免费在线| 欧美日韩操逼动图| 99这里有精品| 麻豆福利视频导航| 亚州欧美色图| av在线免费一区二区| 婷婷亚洲色| 欧美色图私拍91| 人妻激情视频| 无遮挡又黄又刺激的视频| 日本三级R| 99久久综合| 91亚洲网站| 国产亚洲精品农村妇女 | 老鸭窝亚洲毛片| 男人的天堂无码| 欧美性爽xyxOOOO| 99自拍视频在线| 亚州综合图片| 秋霞午夜成人福利片片| 色婷婷久久| 色诱中文字幕| 97欧美综合| 女人被添高潮免费视频| 亚洲日韩欧美一区二区| 精品人妻中文字幕4399| 日韩/97| 色妺妺AⅤ| 留下AⅤ黄色片| 国产美女激情| 午夜精品久久久久久久久久蜜桃| 欧美有码亚洲中文字幕一区二区三区四区| 4tube欧美女厕所| 乱伦1色页| 成人熟女视频一区二区三区| 91伊人| 一本久道久久综合狠狠爱| 精品一区二区2| 综合操逼| 国产精品久久久九九九| 国产精品人妻熟女aⅴ| 嗯嗯嗯,草死我| 极品国产内射| 高潮内射在线| TS人妖另类精品视频系列| 天天干,天天日| 欧美色蜜桃97| 五月丁香综合啪啪| 亚洲无限观看| 多乙久久久久久| 色爽——AV| 日韩一性一交一A片俄罗斯| av一区二区三区四区五区久草臀| 国产精品人妻熟女aⅴ| 亚洲第一色页夜| 大香蕉乱级| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 亚洲第一页色| 欧美亚洲综合高清在线| 青青爽| 国产精品午夜AV完会免费| 99.色网| 精品欧美不卡在线播放| 日韩ab网| 国产精品久久久久久久黄无码| 精品久久九| 亚洲制服欧美另类内射| 理论久久婷婷网8| 性爱综合网| 9久久久久久| 欧亚综合一卡二卡中文字幕| 神马九九| 黄资源| 另类小色呦| 大逼色网站| 欧美在线官网| 国产多人在线观看视频| AV色五月天| 色综合尤物| 天天欧美| 欧美暴力猛交| 18禁超污无遮挡无码免费网| 国产激情在线| 情色av电影| 亚洲色图尤物视频| 亚洲色图第四色| 二色av| 欧美精品久久96人妻无码| 亚洲欧洲色情高清| 精品一区二区亚洲国产| 亚洲情色欧美| 亚拍在线| 中文字幕啊啊啊在线观看视频| 亚洲中文字幕在线视频一区二区| 免费97视频| 色色五月婷婷| 国产精品人人爽人人做可爱福利| 蜜桃AV天堂| 欧美午夜精品久久久久久3D| 日韩高清黄片| 久久久一区二区三区麻豆| 亚洲精品819| 青娱乐国产精品| 午夜男人的天堂| 97色97好| 亚洲第一在线视频| 91精品微拍福利| 97操97干| 超碰97久久观看| 精品色色| 精品久久久久久中文| 亚洲牲交| 欧美,日韩,中文,另类| 久草精品热视| 日韩午夜啪啪视频| 久久久久亚洲AV无码专区少妇| 五月天久久人妻| 在线黄色污污网站| 成人五月香网在线| 免费操逼视频下载| 中文字幕,人妻,日韩| 78操B| 亚洲高清男人天堂| 性在久久久久久| 国产精品久久久久久久久久久久久久吹| 蜜桃久久久久久久| 婷婷色播婷婷| 乱伦图av| 久热影视| 日曰骚久久精品| 91l欧美在线| 女优免费一区二区永久| 一起草日韩| 波多野结衣之双飞调教在线播放| 91久久婷婷| 91人妻久久久久久久久久久久久| 少妇人妻无码| 久久色一区| 丝袜美腿诱惑亚洲欧美视频在线观看| 很很热性爱视频| 国产午夜福利电影免费在线观看 | 蜜臀aV午夜一区二区三区| 欧美综合色站| 91 丝袜在线| 亚洲18禁| 精品丰满人妻一区二区三区免费观| 人妻日日干| 福利操逼| 国产AV色黄看到爽| 人人艹亚洲| 午夜福利一区二区影院| 日本性感人妻91| 偷拍精品一区二区三区| 久久久久99999| 精品玖九九久| 大粗鳼巴久久久久| 日本 情色 1区| 欧亚 另类 久| 99少妇| 色婷婷综合久久久久中文一区二区| 亚洲精品男人的天堂| 狠狠色丁香| 丰满人妻一区二区三区| AA丁香综合激情| 婷婷久月| 久久久人体| 超碰97起碰| 天天综合色电影| 亚洲 图片 综合91| 日本青青草在线| 吉田爱美AV在线| 99re这里只有精品中心播放| 婷婷久久五月天| 成人综合色网| 夜夜爽爽爽| 翘臀vidoes| 大香蕉黄色一区| 国产男人又猛又粗又爽| 操美女高潮抽搐白浆| 婷婷亚洲色| 嗯嗯啊啊视频在线看| 丰满人妻一区二区三区四| 少妇国产不卡| 国精综合一二三区影视| 亚洲综合色男人网| 自拍盗摄一区| 九九九九九九九九九九九九九九九女| 亚州大图综合色图| 91亚洲欧美综合高清在线| 97超碰影音| 亚洲色电影在线| 一区二区三区一亚洲中文字幕、综合区灬 | 久久啊啊啊| 国产精品一区二区密臀| 九九九九九九视频免费| 国模无码人体一区二区三| 俺去啦俺来也久久综合| 中文字幕在线免费观看2| 麻豆久久精品亚洲精品88| 色欲三区| 秋霞一级视频在线观看免费| 中文字幕五区| 天天α片| 日韩精品资源| 日韩激情无码影院| 黄色一级视| 久久熟女人| 天天综合网~91综合网| 99re这里只有精品2| 亚洲天堂资源网| 无码137片内射在线影院| 国精精品无码一二三区水多多| 99热综合| 欧美日韩青操| 日韩15p| 国产JDAV无码视频在线观看| 在线观看成人性爱免费小视频| 久久久久久精品免费看A级| 日韩性爱播放| AV丝袜少妇| 怡红院成人视频| 大香蕉乱级| 色婷视频| 国产日韩欧美| 干少妇视频| 日韩性爱再线视频| 狠肏骚人妻| 夜夜高潮夜夜爽夜夜爱爱一区 | 人人插人人摸人人| 偷拍欧美激情| 美女91网址| 黄片视频,下载| 六六久久日韩不卡| 91女优在线观看| 亚洲在线网站| 99热66| 男人网站婷婷| 最新无码国产| www.婷婷| 东京热免费视频| 成人亚欧免费视频| 日韩av三四区| 99热国产| 天天激情综合站| 久久久蜜桃一区二区三区| 欧美与日韩97| 思思视频免费看网站| 国产成人精品日本亚洲语言| 亚州久久9| 97香蕉网| 亚洲天堂,男人| 91高清日| 色五月激情综合网| 精品国产乱码久久久影院| 亚洲 国产 精品一区| 啊啊啊好大好湿| 国产日韩欧美操逼视频| 色狠人在线99| 精品国产91内射久久| 欧美黄色图片| 91在线秘 男同| 久草综合京东| 97精品免费视频网站| 欧美日韩在线国产在线| 亚洲淫乱骚妇AV| 欧美日韩在线视频网站| 狠狠欧美| 骚女天天综合网| 丁香五月激情综合| 日韩 女同 综合| 乱伦av麻豆| 日欧毛片久久| 波多野结衣一级视频| 青青青青草av在线观看| 久久精品 六十路 熟女 欧美| 伊人成人中文字幕久久网| 天天久久久久久| 人人人人插| 很很很很操| 国产精品嫩草影院免费| 亚洲宗合网| 黄片免费久久久久久久| 超碰免费欧美7| 国产精品嫩草影院免费| 麻豆AV96熟妇人妻| 国产91影院| 天天香香欲综合| 午夜人人操| 操逼精品视频| 免费看黄视频亚洲网站| 青青草久草AV| 精品国产肉丝袜在线拍国语| 午夜亚洲| 亚码激情| 欧美在线91| 少妇同性| 国产自产一区视频在线| 久久久草草精品| 亚洲精品久久久久久久蜜桃臀| 麻豆天美在线| 99国产精品人妻人伦| 久久精品国产精品一区| 干B| 脫衣舞一区二区三区| 日韩国产九九精品一区二区三区毛片| 中文久久爆乳| 91亚洲情色| 国产夜夜操| 久操凹凸视频| 午夜福利合集| 人妻夜夜爽天天爽麻豆三区网站 | 91AV天美在线视频| 国内自拍 日韩激情 99| 欧美丝袜中文字幕07在线| 美女露胸露尿口| 毛片一区二区| 97超碰色屌| 亚洲乱码国产乱码精网站| 美女十八禁| 7月婷婷综合| 黄片免费久久久久久久| 天天综合网~91| sss视频华人在线| 国产吞精a级片激情电影| 日本一区二区中文字幕久久| 欧美中字不卡| 后入内射蜜桃臀| 久久婷综合| 欧 美 自 拍 偷 拍| 91精品久久久久| 农村妇女精品一区二区| 女色视频社区| www.色婷婷色综合| 久久久久久69国产一区二区| 亚洲毛片久久| 91精品免费| 久久久久久久 九九九九九九九| 人人操人人摸人| 蜜乳视频网站| 大色综合| 九九热re99re6在线精品| 伊人991| 国产精品乱人伊人网| 欧美性生活综合| 亚洲色色探花| 国产亚洲深夜激情| 日日夜夜精品视频| 国产白丝网站| 人澡逼| 97频视在线| 日韩99神马视频播放| 青青网三级视频| 国产精品老师| 8050无码八戒| 九色精品视频导航1| 黄色免费一级在线毛片| 欧美黑人熟妇精品91| 久久久成人免费av电影| 成人熟女区| 国产a级精品| 色av中文字| 一区二区 韩日AV| 国产精品秘 福利姬在线观看| 神马久久久久久伦理片| 十八禁视频一区二区| 欲香欲色| 亚洲欧洲激情卡通另类文学四射小说网站 | av天堂天堂av日韩| 少妇熟女1区2区3区| 日本加勒比无码专区| 青青草色AV| 亚洲成人在线资源| 亚洲不卡一| 伊人久日| 福利天天都操| 舔人妻中文免费视频| 丝袜天堂网| 中文字幕精品三级久久久| 好爽免费视频,| 亚洲自拍欧美色综合| 操亚州| 99蜜桃臀久久久欧美精品网站| 伊人青青草久久| 国产偷仑| 亚洲综合性网址| 亚洲Av噜噜一区二区三区妖精| 少妇500双飞99| 黄呦呦在线| 国产精品不卡一区二区三区| 久久99精品国产| 久久久成人精品| 黑人干亚洲| 另类图片五月天| 九九热精品视频六| 综合 亚洲 欧美| 操国产高清| 国产精品久久天天干| 日韩综合无码色欲vv| 人人操人人摸人人看人人干| 日韩欧美午夜视频在线| 日韩国产中文字幕| 人妻激情另类| 中文久久一区| 97操在线| 麻豆天天躁天天揉揉AV| 一区二区不卡视| 青娱乐淫乱1314| 免费少妇一区二区| 国产69精品久久久久99尤物| www.超碰在线| 男人亚洲91首页在线| 国产专区路线| 精品国产久久乱码| 91免费看中出视频| 伊人天天久久动态图| 久久亚州精品成人Av无| 操逼逼福利视频| 99无码视频| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧美婷婷久久| 亚洲丰满很很操| 蜜臀AV午夜精品久| 色综合V| 韩国三级理论在线| 亚洲日韩一区电影| 久久久久久中文版| 97日韩欧美亚洲| 国产无码成人无码| 艹少妇网站| 99精品视频在线观看| 色盈盈影院| 久久久久96| 乱伦熟女论坛| 牛牛aV| 中文字幕在线观看AV| 91男同| 校园春色五月天| 操逼国产免费| 色香阁在线| 亚洲天堂日本| 磁力99AV| 一区二区亚州激情久婷婷欧美| 国产自啪精品视频网站黑丝| 欧美 牲| 色五月首页| 综合影视国产无码| 绑缚麻绳人妻寝取完整版| 亚州色综合| 爱射综合| 熟女性视频| 91欧美巨乳| 亚洲欧美另类小说| 五月婷婷基地| 欧美成人贴图| 校园春色制服丝袜中文字亚洲| 九九九九九九九九九九九免费国产| 97干日韩| 亚洲97资源| 午夜理论片在线观看免费| 一区二区视频你懂的| 伊人久久亚洲中文字幕不卡| 欧美最大综合网| 日本五十路熟女一区二区| 干婷婷综合网| 色玖玖| 激情图片亚洲色图| www欧美91| 超碰人人干| 屁股久久久久久久久| 黄色电影在线播放综合网站| 国内精品999| 久久精品无码专区| 999岛国大片| 麻豆人妻偷人精品无码视频| 亚洲97成人在线观看| 日韩一级二级| 久久男人天堂| 99re6久热只有精品6在线直播| 欧美se综合| 91碰碰碰| 乱伦日本中文自拍| 青草视频在线看看看看看看看看看| 黑人嘿嘿嘿超爽免费视频| 久久婷婷色综合一区二区三区| 精品一区二区三区蜜桃臀赵总 | 欧美精品精品一区二区| 丁香五月综合| 欧美 亚洲 制服 精品| 精品9区| 国产精品盗摄 偷窥盗摄| 怡红院怡春院| 国产精品ⅴ无码大片在线看.| 亚洲AV高潮| 欧美日韩国产另类综合| 白丝少妇一区二区| 嗯啊抽插大香蕉网页| 久久久久久九九九九九九| 自拍大香蕉乱插| 九九九九九九综合| 亚洲高潮少妇| 亚洲乱色熟女一区| 夜夜 中文视频rt| 超碰人人在线| 翔田千里AV无码秘 三区| 午夜天堂精品久久| 日韩乱中文| 日韩有码中文字幕女同性恋| 五月天色图影视| 大学生口爆吞精| 91天堂丝袜美腿| 熟女一区二区| 秋霞免费AV| 天天日天天干天天操| 一区二区 电影 亚洲| ?亚洲伊人伊成久久人综合网| 九九九九九九视频免费| 啊啊啊啊操死我了| 亚洲熟妇极品| 国产www色在线观看| 国产精品96久久久久久| 高清肉丝中文无码| 116美女午夜| 无码伊人久久大杳蕉中文无码| 麻豆国产精品午夜视频| 久热网| 超碰97欧美日韩| 伊人青青一区成人视频在线观看区| 亚洲aV无码成人在线观看| 少妇高潮九九九九| 乱伦图av| 久久久精| 久久骚少妇| 欧美大香蕉卡久久| 中文字幕 码 自拍 视频 区| 婷婷激情五月天小说网| 亚洲国产精品成人综合| 大香蕉欧美| 欧美性夜| 男同专区一区二区三区在线| AV色五月天| 狠操91,com| 啊啊啊好大好湿| 大香蕉欧美国产日韩高潮| 操死我干死我| 欧美亚洲丝袜美女电影| 久热伊人99re| 91丝袜美女| 日韩紧密久久| 99999精品成人| 91日韩网站| 在线电影亚洲色图| 蜜乳av一区二区三区四区不卡| 亚洲欧美在线综合| 骚逼自拍99| 欧美三级偷拍| 欧美92| 试看60秒 爽| 日韩av免费一级电影| 黑人精品XXX一区一二区| 91视频伊人| 久久久久久亚洲中文| 在线观看亚洲专区| 中文字幕在线观看二区三区| 丁香五月婷婷基地| 美女黄页| 99re在线视频国产| 99AV| 日韩成人精品| AA特级绝黄| 亚州情色j区| 青青草伊人久久| 97在线日韩中文字幕| 欧美性91| 人人操人人插人人摸人人干| 国产精品久久久三级无码| 91狠狠综合久久久久久| 夜夜嗨av午夜成人| 亚洲女人毛茸茸91| 91亚洲欧洲| 97精品熟女少妇一区| 亚洲图片偷拍视频区| 精品免费1| 日日97| 无码精品久久| 999在线电影香蕉| 欧美少妇色综合| 丰满人妻一区二区三区| 成年人一级黄色毛片大全在线观看| 激情五月综合网| 少好三P| 操人人| 99爱久久视频频| 综合自拍| 在线人人人人人人精品超| 亚洲AO在线| 精品久久久久综合无码| 能直接看AV的网站| 九一精品牛牛一区二区| 国产捆绑一区| 99性爱| 97久久国产精品女不卡| 国产女生在线| 四虎影视永久在线观看精品免费网站| 亚洲国产美女久久久久| 国产少妇与亚洲av| 青草一区二区| 色五月av| 好湿好紧视频| av凤凰久久久| 亚洲骚男同com| 8050午夜少妇无码| 久久影视二区三区行押| 看黄片视频免费| 欧美日韩另类字幕中文| 日韩在线一区二区| 日本黄色裸日本黄色裸体| 国产探花日韩援交| 97在线观看免费视频l| 又粗又长又爽在线观看| 在线亚洲丝袜视频网站| 少妇啪啪自拍| 亚洲91射| 99精品无码| 日产操逼| 亚洲色图国产另类| 亚洲一欧洲中文字幕在线 | 日韩啪啪啪啪啪| 国内外内射高清视频| 欧美亚洲丝袜美女电影| 嫩呦国产一区二区三区AV| 欧美与日韩97| www.五月天| 尤物av网站免费在线播放| 成人在线视频一区| 久久肏大逼| 色综合av综合久久| 吉川爱美亚洲二区在线 | 精品免费视频国产一区| 热热热热日日漂亮永久永久国产日| 亚洲暴力强奸AV| 夜夜爽夜夜操| 国产熟女精品区| 水野优香在线观看| 日韩国产不卡在线视频| 天天久久久久久| 97 视频在线| 久久九九99| 丁香六月激情| 69精品| 久久亚洲日韩国产欧| 色婷婷aV一区二区三区麻豆综合 | 日本视频在线观看污污污| 国产60页| 性色高清..……| 东京热精品97综合网| 久久精品人体AV| 日本精品第一视频在'| 亚洲精品一区二区精华| 欧美激情内射| 国产精品69久久久久孕妇欧美| 99re6国产精品99re在线| 国产SV一线| 97超碰碰碰| 在线免费观看日韩一区| 熟女高潮精品一区二区| 91丝袜美女国产| 久久久精品电影| 午夜精品久久久久久久| 久久久久久久久久久人妻| www.99在线| 国产人伦精品一区二区三区| 欧美1727免费观看视频| 日本欧美一区二区三区视频麻豆| 另类图片五月天| 欧美玖玖爱免费玖玖| 国产日韩人人| 性色av一区二区| 久久久婷婷| 五月开心久久AV官网| 亚洲少妇色图自慰直播| 天天看片麻豆| 大香网伊人久久综合网eew| 懂色AV中文| 传媒免费一区二区三区| 亚州春色| 97视频在线观看网站| 欧美色图97| 亚洲激情在线| 99热这里只有精品18| 日日夜夜摸| 国产91亚洲精品一区二区三区| 日韩日本欧美在线观看| 少妇熟女1区2区3区| 成人一道本免费视频| 亚洲高清欧美总合| 亚春色色| 久久久亚洲精品中文字幕人妻| 蜜桃色院一区久久| 久草资源欧美在线视频| 色臀aV| 国产又粗又长又大的视频| 国产精品久久久久久久久久久久| 岛国黄片网站| 五月丁香社区婷婷日韩欧美精品影院 | 99亚洲国产精品色一区二区三区| 八戒无码国产午夜福利| 精品超碰国产| 少妇被玩视频二三区| 久久人妻少妇| 精品无码秘 人妻一区二区| 操逼www.| 天天日老熟妇| 看看日B真人视频| 国产无码精品成人| 精品亚洲国产成人AV制服丝袜| 婷婷成人久久久精品| 98福利在线视频| 99婷婷一区二区| 激情专区综合| 日本九九久久99| 国内外内射高清视频| 日韩性爱视频免费在线| 97超碰天天爱天天爱| 超碰在线免费一区二区三区| 国产野战露脸在线播放| 天美国产精品| 青青草原香蕉日本Ap| 韩日性爱av| 亚洲男人的天堂一区二区| 久久精品28| 久草福利在线资源站| 精品无码人妻一区二区免费蜜桃| 91性网| 九九AV| 欧美天天影院| 最新日韩黄片| 天堂综合| 岛国视频一二三区| 伊人国产视频| 午夜国产成人精品视频| 欧美日韩性爱电影在线| 日本精品一级二级三级| 精品久久視頻在线| 国产搭汕a级片| 色噜噜婷婷| 亚洲午夜精品久久久中文影院| 美女自卫慰黄网站免费| 九九九热精品| 亚洲黄网在哪免费看| 美女网站黄页|