C++---存儲周期,作用域,鏈接性

在C++程序設計中,變量的行為不僅由其類型決定,還由存儲周期(變量在內存中存在的時間)、作用域(變量可被訪問的代碼范圍)和鏈接性(變量在多文件程序中的可見性)共同約束。

一、存儲周期(Storage Duration)

存儲周期指變量從被創建到被銷毀的整個生命周期,決定了變量在內存中“存活”的時間長度。C++標準定義了四種存儲周期,每種周期對應不同的內存分配機制和生命周期管理方式。

1. 自動存儲周期(Automatic Storage Duration)

定義:變量在進入其所在的“塊”(由{}包圍的代碼區域)時被創建,離開該塊時自動銷毀,生命周期與塊的執行范圍完全一致。

核心特性

  • 內存位置:通常存儲在棧(stack) 中,棧是一種后進先出(LIFO)的內存區域,由編譯器自動管理分配與釋放。
  • 初始化:每次進入塊時都會重新初始化(若未顯式初始化,局部變量的值為未定義,可能是隨機值)。
  • 適用場景:函數內的局部變量、循環體/分支語句塊內的變量等未被static修飾的變量。

示例

#include <iostream>
using namespace std;void test() {int a = 10; // 自動存儲周期:進入test()時創建,離開時銷毀cout << "a = " << a << endl;if (true) {int b = 20; // 自動存儲周期:進入if塊時創建,離開if塊時銷毀cout << "a + b = " << a + b << endl;}// 此處無法訪問b(已銷毀)
}int main() {test(); // 第一次調用test(),創建a和b并使用test(); // 第二次調用test(),重新創建a(值仍為10),b重新初始化return 0;
}

注意:自動變量的生命周期嚴格受限于塊的范圍,這意味著遞歸函數中的局部變量會在每次遞歸調用時創建新的副本,彼此獨立。

2. 靜態存儲周期(Static Storage Duration)

定義:變量在程序啟動時(或第一次使用時)被創建,在程序終止時銷毀,生命周期與整個程序一致。

核心特性

  • 內存位置:存儲在靜態存儲區(而非棧或堆),該區域在程序加載時分配,程序結束后由操作系統回收。
  • 初始化:僅初始化一次(全局變量在main()前初始化,局部靜態變量在第一次進入塊時初始化),后續值會被保留。
  • 適用場景
    • 全局變量(定義在所有函數外的變量);
    • static修飾的局部變量(函數內的靜態變量);
    • 類的static成員變量(屬于類而非對象)。

示例1:全局變量與局部靜態變量

#include <iostream>
using namespace std;int global_var = 0; // 靜態存儲周期:程序啟動時初始化,終止時銷毀void count() {static int local_static = 0; // 靜態存儲周期:第一次調用時初始化local_static++;global_var++;cout << "local_static: " << local_static << ", global_var: " << global_var << endl;
}int main() {count(); // 輸出:local_static: 1, global_var: 1count(); // 輸出:local_static: 2, global_var: 2count(); // 輸出:local_static: 3, global_var: 3return 0;
}

解析global_var在程序啟動時初始化,local_static在第一次調用count()時初始化,兩者的值都會在多次調用中保留并遞增。

示例2:類的靜態成員變量

#include <iostream>
using namespace std;class Student {
public:static int total; // 類靜態成員:屬于整個Student類,所有對象共享string name;Student(string n) : name(n) {total++; // 每次創建對象時,total遞增}
};int Student::total = 0; // 類外初始化(必須)int main() {Student s1("Alice");Student s2("Bob");cout << "總學生數:" << Student::total << endl; // 輸出:2return 0;
}

解析totalStudent類的靜態成員,所有對象共享同一內存,因此能統計總實例數。

3. 動態存儲周期(Dynamic Storage Duration)

定義:變量的生命周期由程序員手動控制,通過new(或new[])創建,delete(或delete[])銷毀,若未手動銷毀會導致內存泄漏。

核心特性

  • 內存位置:存儲在堆(heap) 中,堆是一塊需要手動管理的內存區域,大小通常遠大于棧。
  • 初始化:通過new創建時可顯式初始化(如new int(5)),未初始化則值為未定義。
  • 適用場景:需要動態分配大小(如動態數組)、生命周期需跨越多個函數或塊的變量。

示例

#include <iostream>
using namespace std;int main() {// 動態創建單個變量int* num = new int(100); // 動態存儲周期:通過new創建cout << *num << endl; // 輸出:100// 動態創建數組int* arr = new int[5]{1, 2, 3, 4, 5}; // C++11支持初始化列表for (int i = 0; i < 5; i++) {cout << arr[i] << " "; // 輸出:1 2 3 4 5}// 手動銷毀,避免內存泄漏delete num;delete[] arr; // 數組需用delete[]return 0;
}

注意:動態變量的生命周期與作用域無關,即使指針超出作用域,堆上的內存仍需手動釋放(否則內存泄漏)。現代C++推薦使用智能指針(unique_ptrshared_ptr)自動管理動態內存。

4. 線程存儲周期(Thread-Local Storage Duration)

定義:變量的生命周期與所屬線程一致,線程創建時變量被初始化,線程結束時被銷毀。C++11引入,用于多線程場景下的線程私有數據。

核心特性

  • 關鍵字thread_local(可與staticextern結合,控制鏈接性)。
  • 內存位置:每個線程擁有獨立的變量副本,存儲在各自的線程私有內存中。
  • 適用場景:多線程中需避免共享狀態的變量(如線程ID、局部計數器)。

示例

#include <iostream>
#include <thread>
using namespace std;thread_local int thread_id = 0; // 每個線程有獨立副本void print_id(int id) {thread_id = id; // 為當前線程的副本賦值cout << "線程" << id << "的thread_id:" << thread_id << endl;
}int main() {thread t1(print_id, 1);thread t2(print_id, 2);t1.join(); // 等待線程1結束t2.join(); // 等待線程2結束return 0;
}
// 輸出(順序可能不同):
// 線程1的thread_id:1
// 線程2的thread_id:2

解析thread_idthread_local修飾,線程1和線程2分別操作自己的副本,互不干擾。

二、作用域(Scope)

作用域指變量名在代碼中可被訪問的區域,即“變量名有效”的范圍。超出作用域后,變量名無法被引用(但變量的生命周期可能仍在繼續,如靜態局部變量)。C++定義了五種作用域。

1. 塊作用域(Block Scope)

定義:由{}包圍的代碼塊內聲明的變量,作用域從聲明點開始,到塊的結束點 } 結束。

核心特性

  • 嵌套塊:內層塊可訪問外層塊的變量,但外層塊無法訪問內層塊的變量。
  • 名稱隱藏:內層塊中若聲明與外層塊同名的變量,內層變量會“隱藏”外層變量(通過::可訪問全局變量)。

示例

#include <iostream>
using namespace std;int main() {int x = 10; // 塊作用域:main函數內可見cout << "外層x:" << x << endl;{ // 內層塊int x = 20; // 塊作用域:內層塊內可見,隱藏外層xint y = 30; // 塊作用域:僅內層塊可見cout << "內層x:" << x << ", y:" << y << endl;}// cout << y << endl; // 錯誤:y超出作用域cout << "外層x:" << x << endl; // 仍為10(未被內層x影響)return 0;
}
2. 函數作用域(Function Scope)

定義:僅適用于goto語句的標簽(label),作用域覆蓋整個函數,無論標簽聲明在函數的哪個位置。

核心特性

  • 標簽名在函數內必須唯一,避免沖突。
  • goto可跳轉到函數內任意標簽,但不能跨函數跳轉。

示例

#include <iostream>
using namespace std;void func() {cout << "開始" << endl;goto mid; // 跳轉到mid標簽(盡管mid聲明在后面)cout << "跳過的代碼" << endl;mid: // 標簽,作用域覆蓋整個func()cout << "中間" << endl;goto end;cout << "另一部分跳過的代碼" << endl;end: // 標簽cout << "結束" << endl;
}int main() {func();return 0;
}
// 輸出:
// 開始
// 中間
// 結束
3. 函數原型作用域(Function Prototype Scope)

定義:函數聲明(原型)中參數的名稱,作用域僅限于原型本身,與函數定義中的參數名無關。

核心特性

  • 原型中的參數名僅用于說明參數含義,可省略(但不推薦,影響可讀性)。
  • 原型與定義的參數名可不同,編譯器僅檢查類型是否匹配。

示例

#include <iostream>
using namespace std;// 函數原型:參數名a、b的作用域僅限于此原型
void add(int a, int b); // 函數定義:參數名x、y與原型的a、b無關
void add(int x, int y) { cout << x + y << endl;
}// 原型可省略參數名(僅保留類型)
void multiply(int, int); void multiply(int m, int n) {cout << m * n << endl;
}int main() {add(2, 3); // 輸出:5multiply(2, 3); // 輸出:6return 0;
}
4. 類作用域(Class Scope)

定義:類的成員(成員變量、成員函數、嵌套類型等)的作用域為整個類,需通過類名或對象訪問。

核心特性

  • 類內成員可直接相互訪問(不受訪問控制符影響)。
  • 類外訪問需通過“對象.成員”(非靜態成員)或“類名::成員”(靜態成員)。
  • 訪問控制符(public/private/protected)限制的是訪問權限,而非作用域。

示例

#include <iostream>
using namespace std;class Circle {
private:double radius; // 類作用域:Circle類內可見
public:static const double PI; // 靜態成員,類作用域Circle(double r) : radius(r) {} // 構造函數,類作用域double area() { // 成員函數,類作用域return PI * radius * radius; // 直接訪問類內成員}
};const double Circle::PI = 3.14159; // 類外初始化靜態成員int main() {Circle c(2.0);cout << "面積:" << c.area() << endl; // 通過對象訪問非靜態成員cout << "PI:" << Circle::PI << endl; // 通過類名訪問靜態成員// cout << c.radius << endl; // 錯誤:radius是private,無訪問權限return 0;
}
5. 命名空間作用域(Namespace Scope)

定義:命名空間內聲明的實體(變量、函數、類等)的作用域為整個命名空間,包括嵌套的命名空間。

核心特性

  • 全局命名空間:未被任何命名空間包裹的區域(如全局變量),作用域為整個程序。
  • 自定義命名空間:用namespace定義,可避免名稱沖突(如庫函數重名)。
  • 訪問方式:同命名空間內直接訪問;跨命名空間需用“命名空間名::成員”或using指令。

示例

#include <iostream>
using namespace std;// 全局命名空間
int global = 100;namespace Math {const double PI = 3.14; // 自定義命名空間作用域namespace Arithmetic { // 嵌套命名空間int add(int a, int b) { return a + b; }}
}int main() {cout << "全局變量:" << global << endl;cout << "Math::PI:" << Math::PI << endl;cout << "Math::Arithmetic::add(2,3):" << Math::Arithmetic::add(2,3) << endl;using namespace Math::Arithmetic; // 引入命名空間,可直接使用addcout << "add(4,5):" << add(4,5) << endl; // 輸出:9return 0;
}

三、鏈接性(Linkage)

鏈接性描述變量或函數在多文件程序中的可見性,決定了多個源文件是否能共享同一實體。鏈接性僅針對具有靜態存儲周期的實體(自動/動態存儲周期的實體無鏈接性),分為三種類型。

1. 外部鏈接(External Linkage)

定義:實體可在多個源文件中訪問,所有文件共享同一內存地址。

適用場景

  • 全局變量(未被static修飾);
  • static的函數;
  • 類的非static成員(通過對象訪問);
  • extern聲明的變量(顯式指定外部鏈接)。

示例(多文件程序)

文件1:global.cpp

int shared_var = 10; // 外部鏈接:可被其他文件訪問void print() { // 外部鏈接:可被其他文件調用cout << "shared_var = " << shared_var << endl;
}

文件2:main.cpp

#include <iostream>
using namespace std;// 聲明外部鏈接的變量和函數(來自global.cpp)
extern int shared_var; 
extern void print();int main() {shared_var = 20; // 修改共享變量print(); // 輸出:shared_var = 20return 0;
}

解析shared_varprint()具有外部鏈接,main.cpp通過extern聲明后可訪問global.cpp中的實體,兩者操作的是同一內存。

2. 內部鏈接(Internal Linkage)

定義:實體僅在當前文件中可見,其他文件無法訪問(即使聲明也不行)。

適用場景

  • static修飾的全局變量;
  • static修飾的函數;
  • 未加externconst全局變量(C++默認內部鏈接)。

示例(多文件程序)

文件1:internal.cpp

static int file_var = 100; // 內部鏈接:僅file1.cpp可見static void file_func() { // 內部鏈接:僅file1.cpp可見cout << "file_var = " << file_var << endl;
}

文件2:main.cpp

#include <iostream>
using namespace std;extern int file_var; // 錯誤:file_var是內部鏈接,無法跨文件訪問
extern void file_func(); // 錯誤:file_func是內部鏈接int main() {// file_func(); // 編譯錯誤:未定義引用return 0;
}

解析file_varfile_func()static修飾,僅在internal.cpp中可見,main.cpp無法訪問,避免了多文件中的名稱沖突。

3. 無鏈接(No Linkage)

定義:實體僅在自身作用域內可見,無法被其他作用域或文件訪問。

適用場景

  • 塊作用域內的變量(自動/靜態局部變量);
  • 函數參數;
  • 類的非靜態成員(僅屬于對象,無跨文件共享意義);
  • 命名空間內的塊作用域變量。

示例

#include <iostream>
using namespace std;namespace Test {int ns_var = 5; // 外部鏈接(命名空間全局變量)void func() {int local = 10; // 無鏈接:僅func()內可見static int static_local = 0; // 無鏈接:僅func()內可見(靜態存儲周期)static_local++;cout << "local: " << local << ", static_local: " << static_local << endl;}
}int main() {Test::func(); // 輸出:local: 10, static_local: 1Test::func(); // 輸出:local: 10, static_local: 2// cout << Test::local << endl; // 錯誤:local無鏈接,超出作用域return 0;
}

四、存儲周期、作用域與鏈接性的關系

三者是描述變量行為的不同維度,相互關聯但獨立:

維度核心含義與其他維度的關聯
存儲周期變量“活多久”(生命周期)靜態存儲周期的變量可能有外部/內部鏈接;自動/動態存儲周期的變量一定無鏈接。
作用域變量“在哪里可被訪問”作用域決定鏈接性的可見范圍(如外部鏈接變量的作用域是命名空間,內部鏈接是文件)。
鏈接性變量“能否跨文件共享”僅靜態存儲周期的變量有鏈接性;作用域是鏈接性的“局部化”表現(如文件是特殊的作用域)。

典型組合示例

  1. 自動存儲周期 + 塊作用域 + 無鏈接
    普通局部變量(如int a = 0;),進入塊時創建,離開時銷毀,僅在塊內可見,無法跨文件共享。

  2. 靜態存儲周期 + 命名空間作用域 + 外部鏈接
    全局變量(如int g = 0;),程序啟動時創建,終止時銷毀,在所有文件中可見(需extern聲明)。

  3. 靜態存儲周期 + 塊作用域 + 無鏈接
    靜態局部變量(如static int count = 0;),程序啟動時創建,終止時銷毀,僅在塊內可見,無法跨文件共享。

  4. 靜態存儲周期 + 命名空間作用域 + 內部鏈接
    靜態全局變量(如static int file_g = 0;),程序啟動時創建,終止時銷毀,僅在當前文件可見。

五、常見誤區與注意事項

  1. static的多重含義
    static在不同場景下含義不同:修飾局部變量時控制存儲周期(靜態),修飾全局變量/函數時控制鏈接性(內部),修飾類成員時表示“類共享”。

  2. const與鏈接性
    全局const變量默認具有內部鏈接(類似static),若需外部鏈接需顯式加extern(如extern const int x = 5;)。

  3. 靜態局部變量的線程安全性
    C++11后,靜態局部變量的初始化是線程安全的(編譯器保證僅一個線程執行初始化),但后續修改仍需手動加鎖。

  4. 鏈接性與多重定義
    外部鏈接的變量/函數在多文件中只能定義一次(否則鏈接錯誤),但可多次聲明;內部鏈接的實體可在不同文件中重名定義(彼此獨立)。


存儲周期、作用域與鏈接性共同構成了C++變量行為的完整描述:

  • 存儲周期回答“變量活多久”,決定內存管理方式;
  • 作用域回答“變量在哪里可被訪問”,控制代碼中的可見范圍;
  • 鏈接性回答“變量能否跨文件共享”,支持多文件程序的協作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/100411.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/100411.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/100411.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Python的商品爬取與可視化系統

本系統是基于Python的商品數據爬取與價格分析可視化系統&#xff0c;集成了數據爬取、數據存儲、數據展示和可視化分析等功能。下面介紹一下系統主要功能和技術棧。一、主要功能&#xff1a;1、數據爬取功能 支持淘寶美妝商品數據爬取 可配置搜索關鍵詞和爬取頁數 實時顯示爬取…

聯邦學習過程中,了解清楚影響準確率的因素有哪些也很重要

影響模型準確率的因素有很多&#xff0c;下面是一些主要的因素&#xff0c;它們可以從數據、模型設計、訓練策略以及超參數等多個層面來考慮。1. 學習率作用&#xff1a;學習率直接影響模型的訓練速度、穩定性和最終表現。過高的學習率可能導致模型不收斂或收斂不穩定&#xff…

C# WPF中使用System.Management.Automation類調用Powershell報錯解決辦法

在WPF開發中&#xff0c;需要使用powershell進行自動化管理&#xff0c;以下為開發環境 1、.NET framework 4.7.2 2、VS2019 社區版 使用System.Management.Automation類 遇到的問題&#xff1a; 需要引用 System.Management.Automation類&#xff0c;但是在使用using指令時無法…

從 Pump.fun「直播」看熱點幣的生與死

在加密市場里&#xff0c;熱點就是流量&#xff0c;流量就是價值。最近&#xff0c;Solana 生態的 Pump.fun 推出了「直播」板塊&#xff0c;讓發幣這件事變得像看秀一樣&#xff1a;一個個新幣在鏈上實時登場&#xff0c;社區即時互動&#xff0c;玩家實時下注。這種形式不僅帶…

圖靈完備性:計算理論的基石與無限可能

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 1 圖靈完備性的基本概念 圖靈完備性&#xff08;Turing completeness…

HarmonyOS 5.0應用開發——V2裝飾器@once的使用

【高心星出品】 文章目錄V2裝飾器once的使用概念一、核心作用與規則二、適用場景案例V2裝飾器once的使用 概念 在鴻蒙ArkTS開發中&#xff0c;Once裝飾器用于實現子組件僅接受父組件傳遞的初始值&#xff0c;后續父組件數據變化不再同步至子組件。以下是其核心要點&#xff1…

跨域請求:解決方案

一、跨域核心概念&#xff1a;同源策略與跨域定義 跨域問題的根源是瀏覽器的 同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;這是瀏覽器為保護用戶數據安全而設置的核心安全限制。 1. 什么是 “同源”&#xff1f; “同源” 指的是兩個 URL 的 協議、域名…

前端形態與樣式風格:從古典到現代的視覺語言演進

目錄前端形態與樣式風格&#xff1a;從古典到現代的視覺語言演進概述1. 前端形態的演進&#xff1a;四種核心范式1.1 古典范式&#xff1a;語義化HTML與CSS1.2 組件化范式&#xff1a;模塊化與復用1.3 響應式范式&#xff1a;多端適配1.4 動態范式&#xff1a;狀態驅動視圖2. 樣…

用戶系統從0到1:登錄、權限、積分一網打盡

&#x1f464; 用戶系統從0到1&#xff1a;登錄、權限、積分一網打盡 副標題&#xff1a;Flask-Login 多級權限 積分會員系統實戰 項目原型&#xff1a;https://madechango.com 難度等級&#xff1a;???☆☆ 預計閱讀時間&#xff1a;20分鐘 &#x1f3af; 引子&#xff1…

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級

Java 大視界 -- Java 大數據在智能安防視頻監控系統中的視頻內容理解與智能預警升級引言&#xff1a;正文&#xff1a;一、傳統安防監控的 “三重困局”&#xff1a;看不全、看不懂、反應慢1.1 人工盯屏 “力不從心”1.1.1 攝像頭密度與人力的矛盾1.1.2 錄像調閱 “馬后炮”1.2…

OpenHarmony包管理子系統核心源碼深度解讀:從BundleManager到AMS,徹底打通應用安裝、卸載與沙箱機制全鏈路

目錄 架構概覽 核心組件詳解 包安裝流程分析 包卸載流程分析 包更新流程分析 包信息存儲機制 Launcher界面管控 開機默認系統應用安裝機制<

簡單聊聊神經網絡中的反向傳播

參考文章&#xff1a; 一文弄懂神經網絡中的反向傳播法——BackPropagation - Charlotte77 - 博客園 反向傳播求偏導原理簡單理解_反向傳播偏導-CSDN博客 這篇文章是筆者在讀完上述兩篇參考文章后的整理或者說按照自己的理解進行的一些補充&#xff0c;強烈推薦先閱讀上述兩篇文…

JSP自駕游管理系統46u2v--(程序+源碼+數據庫+調試部署+開發環境)

本系統&#xff08;程序源碼數據庫調試部署開發環境&#xff09;帶論文文檔1萬字以上&#xff0c;文末可獲取&#xff0c;系統界面在最后面。系統程序文件列表開題報告內容一、研究背景與意義 近年來&#xff0c;自駕游因自由度高、個性化強成為國內旅游市場增長最快的領域&…

通過 SQL 快速使用 OceanBase 向量檢索學習筆記

背景 AI時代離不開向量數據庫&#xff0c;向量數據庫簡單說就是在數據庫中用多維向量存儲某類事物的特征&#xff0c;通過公式計算各個向量在空間坐標系中的位置關系&#xff0c;以此來判斷事物之間的相似性。相關基礎概念如下: ● Embedding ● 距離/相似性度量 ○ Cosine dis…

PromptAD:首次引入提示學習,實現精準工業異常檢測,1張正常樣本即可超越現有方法

近年來&#xff0c;工業異常檢測&#xff08;Anomaly Detection&#xff09;在智能制造、質量監控等領域扮演著越來越重要的角色。傳統方法通常依賴大量正常樣本進行訓練&#xff0c;而在實際生產中&#xff0c;異常樣本稀少甚至不存在&#xff0c;能否僅憑少量正常樣本就實現精…

算法 --- 字符串

字符串 字符串算法題目主要處理文本的查找、匹配、比較、變換和統計問題&#xff0c;其核心特點是輸入數據為字符序列&#xff0c;解題關鍵在于利用其連續性、前綴性、字典序等特性&#xff0c;并常借助哈希、自動機、指針滑動、動態規劃等技巧高效處理。 詳細分類型與適用場景…

SpringBoot中 Gzip 壓縮的兩種開啟方式:GeoJSON 瘦身實戰

目錄 前言 一、GZIP壓縮知識簡介 1、什么是Gzip 2、Gzip特點 3、Gzip在GIS方面的應用 二、SpringBoot中開啟Gzip的方式 1、在SpringBoot中開啟Gzip的知識簡介 2、SpringBoot中GeoJSON的實例 三、全局開啟Gzip實現 1、實現原理 2、實現效果 四、局部約定配置 1、實現…

PPTist+cpolar:開源演示文稿的遠程創作方案

文章目錄前言【視頻教程】1. 本地安裝PPTist2. PPTist 使用介紹3. 安裝Cpolar內網穿透4. 配置公網地址6. 配置固定公網地址前言 PPTist作為開源在線演示文稿工具&#xff0c;提供媲美PowerPoint的核心功能&#xff0c;支持多頁面編輯、圖表插入、音視頻嵌入和動畫效果設置。特…

服務注冊/服務發現-Eureka

目的&#xff1a;解決微服務在調用遠程服務時URL寫死的問題注冊中心服務提供者&#xff08;Server&#xff09;&#xff1a;一次業務中&#xff0c;被其他微服務調用的服務&#xff0c;也就是提供接口給其他微服務。服務消費者&#xff08;Client&#xff09;:一次業務中&#…

cuda stream

基本概念 cuda stream表示GPU的一個操作隊列&#xff0c;操作在隊列中按照一定的順序執行&#xff0c;也可以向流中添加一定的操作如核函數的啟動、內存的復制、事件的啟動和結束等 一個流中的不同操作有著嚴格的順序&#xff0c;但是不同流之間沒有任何限制 cuda stream中排隊…