深夜美女视频一区二区_91sao在线看片水片_亚洲日韩国语_精品中文字幕久久边人妻_高潮喷水香蕉视频色_白洁国产剧情Av手机在线_国产精品情侣呻吟_天空影院播放免费完整版视频_少妇高潮惨叫喷水在线观看_公交车大龟廷进我身体里

Hi,您好,歡迎來到西安盛圖軟件科技有限公司!

C++ 存儲(chǔ)類型

發(fā)布時(shí)間:2023-12-04 15:16:11

C++中的存儲(chǔ)類型有

auto,register,static,extern,mutable,thread_local (C++11),存儲(chǔ)類型說明了變量要在進(jìn)程中分配內(nèi)存空間位置,可以為變量分配內(nèi)存存儲(chǔ)空間的有數(shù)據(jù)區(qū)、BBS區(qū)、棧區(qū)、堆區(qū)。本文主要介紹C++中的存儲(chǔ)類型。

代碼區(qū):存放CPU執(zhí)行的機(jī)器指令,代碼區(qū)是可共享,并且是只讀的。

數(shù)據(jù)區(qū):存放已初始化的全局變量、靜態(tài)變量(全局和局部)、常量數(shù)據(jù)。

BBS區(qū):存放的是未初始化的全局變量和靜態(tài)變量。

棧區(qū):由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值、返回值和局部變量,在程序運(yùn)行過程中實(shí)時(shí)分配和釋放,棧區(qū)由操作系統(tǒng)自動(dòng)管理,無須程序員手動(dòng)管理。

堆區(qū):堆是由malloc()函數(shù)分配的內(nèi)存塊,使用free()函數(shù)來釋放內(nèi)存,堆的申請(qǐng)釋放工作由程序員控制,容易產(chǎn)生內(nèi)存泄漏。

C語言包含4種儲(chǔ)存類型,如下表:

特征

自動(dòng)儲(chǔ)存類型

寄存器儲(chǔ)存類型

靜態(tài)儲(chǔ)存類型

外部?jī)?chǔ)存類型

關(guān)鍵字

auto

register

static

extern

儲(chǔ)存于

內(nèi)存

CPU寄存器

內(nèi)存

內(nèi)存

默認(rèn)初始值

垃圾值

垃圾值

0或空白符

0或空白符

作用域

局限于塊

局限于塊

局限于塊

全局

生命周期

塊內(nèi)

塊內(nèi)

存在于函數(shù)之間

存在于函數(shù)之間

注意:塊指的是寫在左右花括號(hào):{ }內(nèi)的一組語句。局部變量是聲明在塊內(nèi)的變量。從 C++ 17 開始,auto 關(guān)鍵字不再是 C++ 存儲(chǔ)類說明符,且 register 關(guān)鍵字被棄用。

1、auto存儲(chǔ)類型

C++ 98標(biāo)準(zhǔn)/C++03標(biāo)準(zhǔn)

同C語言的意思完全一樣:auto被解釋為一個(gè)自動(dòng)存儲(chǔ)變量的關(guān)鍵字,也就是申明一塊臨時(shí)的變量?jī)?nèi)存。

C++ 11標(biāo)準(zhǔn)

在C++11標(biāo)準(zhǔn)的語法中,auto被定義為自動(dòng)推斷變量的類型。

例如,

auto d=4.38;      //double
auto s("hello");  //const char*
auto z = new auto(10); // int*
auto x1 = 5, x2 = 5.0, x3='c';//錯(cuò)誤,必須是初始化為同一類型

注意:C++11的auto關(guān)鍵字時(shí)有一個(gè)限定條件,那就是必須給申明的變量賦予一個(gè)初始值,否則編譯器在編譯階段將會(huì)報(bào)錯(cuò)。

2、extern存儲(chǔ)類型

extern用來聲明在當(dāng)前文件中引用在當(dāng)前項(xiàng)目中的其它文件中定義的全局變量。如果全局變量未被初始化,那么將被存在BBS區(qū)中,且在編譯時(shí),自動(dòng)將其值賦值為0,如果已經(jīng)被初始化,那么就被存在數(shù)據(jù)區(qū)中。全局變量,不管是否被初始化,其生命周期都是整個(gè)程序運(yùn)行過程中,為了節(jié)省內(nèi)存空間,在當(dāng)前文件中使用extern來聲明其它文件中定義的全局變量時(shí),就不會(huì)再為其分配內(nèi)存空間。

例如,

#include <iostream>
int i;  //相當(dāng)于這個(gè)全局變量是在其它文件中定義的
extern int i; //聲明引用全局變量i  
int main(void)  
{  

   std::cout << "in main i=" << i << std::endl;
   return 0;  
}

注意:如果要調(diào)用另外一個(gè)文件中的全局變量,如果再聲明一個(gè)同名的全局變量,那么編譯器會(huì)因?yàn)橹孛麍?bào)錯(cuò),這個(gè)時(shí)候就要使用extern變量。extern聲明告訴編譯器這個(gè)變量的定義在其他文件中,所以并不會(huì)為它分配內(nèi)存。

3、register存儲(chǔ)類型

聲明為register的變量在由內(nèi)存調(diào)入到CPU寄存器后,則常駐在CPU的寄存器中,因此訪問register變量將在很大程度上提高效率,因?yàn)槭∪チ俗兞坑蓛?nèi)存調(diào)入到寄存器過程中的好幾個(gè)指令周期。

例如,

#include <iostream>
using namespace std;  
int main(void)  
{  
   register int i,sum=0;  
   for(i=0;i<100;i++)  
       sum=sum+1;  
   cout << sum  << endl;
上一篇:C++ 標(biāo)準(zhǔn)庫
下一篇:C++ 作用域及命名空間

歡迎登錄盛圖科技

歡迎注冊(cè)盛圖科技

已有賬號(hào),立即登錄