C 類庫中靜態函式什麼時候定義 另外類中的成員變數是儲存在堆中還是棧中

2021-04-18 11:51:47 字數 2875 閱讀 6996

1樓:匿名使用者

1、靜態

方法和靜態變數在編譯

階段分配好的,動態方法和動態變數是在專執行階段才分配記憶體的屬,就這點區別。

2、成員變數儲存在堆(資料段)內。只有函式的引數才儲存在棧裡面,因為每次呼叫函式都需要逐個數引數(進棧和出棧)

2樓:小瓦工

堆,向下分配記憶體

來(new,malloc等)

-----------------------------------

浮動棧源,向上分配記憶體(函式內部變數

bai,物件的內部成員變數等

du.一般都有生命

zhi週期)

-----------------------------------

基棧.(也叫靜態存dao儲區,包括**段,靜態變數,全域性變數,const常量等,程式一調入記憶體至少要佔這麼多空間)

c++類的資料成員是儲存在棧記憶體中還是在堆記憶體中?

3樓:匿名使用者

c++類的資料復

成員的生存週期制是根據你建立的物件而言的。物件存在資料成員才有意義。解構函式釋放的是物件的記憶體。

你普通宣告的話就在棧裡,用new就在堆裡。物件生命週期結束系統自動呼叫解構函式,不關在堆還是棧。用解構函式釋放記憶體一般都是你在建構函式裡分配了空間,解構函式釋放建構函式裡分配的空間

4樓:匿名使用者

非託管的c++的類資料成員應該是在堆記憶體中的~

5樓:匿名使用者

c++類只是一種資料型別,其資料成員的儲存方式取決於你建立例項的方式。

6樓:匿名使用者

您說的是動態資料還是區域性資料?動態資料是存放在堆區,而區域性資料是存放在棧區的!

c++的成員變數是在堆還是棧區

7樓:幻夢·人生

成員變數並不能決定自身的

儲存空間位置。決定儲存位置的物件的建立方式。

即:如果物件是函式內的非靜態區域性變數,則物件,物件的成員變數儲存在棧區。

如果物件是全域性變數,則物件,物件的成員變數儲存在靜態區。

如果物件是函式內的靜態區域性變數,則物件,物件的成員變數儲存在靜態區。

如果物件是new出來的,則物件,物件的成員變數儲存在堆區。

8樓:匿名使用者

這不是根據這個來分的,這要看你物件本身在哪兒

9樓:風吹過的街道

在main裡面,如果使用了new就是堆區,如果沒有就是棧區

10樓:匿名使用者

是在堆區是在堆區是在堆區是在堆區是在堆區

c++中,類的私有成員變數放在什麼段中,是在堆疊段中嗎?

11樓:s親友團

你說bai的應該是對

象的成員變數du

如 begar(不懂zhi程式設計的程式設計師) 所說,物件dao的成版員變數就放權在物件內

如果物件本身是堆疊(ss)裡的,那麼它的(非靜態)資料成員也在堆疊裡如果物件本身是堆裡的,那麼它的(非靜態)資料成員也在堆裡如果物件本身是ds裡的,那麼它的資料成員也在ds裡所謂public/private/protected規定的是成員的「存取」許可權

而ss/ds/heap是「儲存」方式,與前者沒有任何關係

c語言裡,哪些變數是存放在堆裡,哪些是存放在棧裡?(

12樓:匿名使用者

在c/c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。內容

棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

堆:就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個new就要對應一個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區:就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

全域性儲存區(靜態儲存區):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後有系統釋放。

常量儲存區:這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改。

希望對你有幫助

13樓:匿名使用者

放在堆裡的資料時管理員自己開闢空間和釋放空間,如,new 和malloc,而放在棧裡的資料時計算機自動分配記憶體和釋放的,如變數

c++裡面,static int* a=new int(); a存放在記憶體的哪一塊?堆?棧?還是靜態變

14樓:匿名使用者

static int* a=new int();a是一個指標變數(int *型別,4個位元組,在靜態儲存區)a=new int(),動態分配了一個整數的空間,更常用的是動態分配一個陣列,比如a=new int[10],動態分配的空間位於堆區,a指標變數儲存了動態分配空間的首地址。

15樓:

首先new int()返回一個指向堆區的地址,傳給a,

而a是靜態變數區中的一個變數。

總結就是,靜態變數a是一個指標,指向堆區的一個int變數的地址,a的指向不可變,而堆區int變數的值可變。

16樓:馮英峰

廢話就不說了。簡單直接的回答你:放在靜態區(全域性區)。

滿意請採納,謝謝

17樓:匿名使用者

new出來的 肯定是堆啊

c 語言中類中的靜態資料成員為什麼必須在類體外初始化

可以通過以下幾個例子更形象的說明這個問題 test.cpp include class a int main 編譯以上 會出現 對 a a 未定義的引用 錯誤。這是因為靜態成員變數a未定義,也就是還沒有分配記憶體,顯然是不可以訪問的。再看如下例子 test.cpp include class a i...

C 中為什麼類(class)的定義最後(括號後面)還要加個分號

因為那是宣告語句,語句都要加分號。和結構一樣啊 語法 沒有為什麼 就跟c語言中struct語句一樣的,語句後面要加分號,這是c c 的規定 c 中,定義一個類的時候有些 在成員函式的後面加了一個分號,結果編譯也能通過,不加分號也是正確 加分號的是成員函式宣告,在類外部有函式實現 的。不加分號的是直接...

c中類和名稱空間是什麼?為什麼要用?什麼時候用

類是一種新的資料型別,和整型等基本型別不同,類除了定義資料之外,同時還定義了對這些資料的操作。換句話說,類是既有資料又有操作的資料型別。空間的概念主要是進行資料有效性的限定,這裡定義的,在這裡有效,要想到別的地方能夠使用,必須遵循新的規則。或者說,有了空間就有了兩條規則,對內 空間內部 規則和對外 ...