當前位置:首頁 » 服務存儲 » 成員變數存儲地點
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

成員變數存儲地點

發布時間: 2022-08-26 20:29:07

1. C++類編譯好後,成員變數存儲在什麼位置

首先,編譯好後沒運行之前,成員變數在內存中是不存在的。

其次,運行後,成員變數可能在堆上,可能在棧上,也可能在靜態區,分情況:

classObj{
inta;
}

Objobj1;//全局變數,a在靜態區

intmain(){
Objobj2;//函數內變數,a在棧上
Obj*obj3=newObj();//動態申請的對象,a在堆上
staticObjobj4;//靜態變數,a在靜態區

return0;
}

不知道有沒有遺漏。

建議你看看 http://blog.csdn.net/qq_33266987/article/details/51965221

2. C++類編譯好後,成員變數存儲在什麼位置代碼區

內存被他為棧區和堆區,程序的全局變數和局部變數這些數據是存放在棧中,因為一個子程序或函數調用結束後,函數或子程序使用的內存全被回收,這人實現的方法就是棧。函數在調用編譯器會在棧中分配足夠的空間,然後將數據全部壓入棧中,等調用結束會自動清空棧,這樣函數所使用的內存就消失了。
但我們知道動態內存是可以誇函數使用的,這是因為動態內存是分配在堆中,不受棧這個條件的限制,所以動態內存需要我們自己去釋放,如果我們自己不釋放就會造成內存泄漏,但操作系統會在程序結束後回收程序使用的所有內存。
至於代碼區,數據區,棧區,這些在8086中是很重要的,這是因為8086CPU的問題。現在的32位CPU和16位CPU在對這些區的定義不一樣。32位CPU可以不用去管這些區,但在進行32匯編時還是要需要,不同區會有不同的屬性,但對程序的整體影響不大。
建議你去看羅雲彬的win32匯編,這本書對這些說得很清楚,只是書有點厚,難懂。

3. Java中的成員變數的引用存放在棧的什麼位置

Java中的成員變數的引用是放在類實例所在的堆內存,沒有放在棧中

4. java中成員變數放在哪

在類體的變數部分中定義的變數,也稱為欄位

Clothes類的成員變數:

package ch05.sample;
public class Clothes
{
String id; //實例變數
private String colorType; //實例變數
private int size; //實例變數
private static String depart; //類變數
final String design="yangzi"; //常量
}

例如定義一個類:
class Text
{
public static int number;
public int temp;
}
如果你想訪問temp屬性,你就必須先創建一個Text的對象,才能訪問:Text b = new Text();
b.temp;這就是實例成員變數。
而你想 訪問number的話,不用創建Text的實例就可以訪問,就像這樣:Text.number.這就是類成員變數。
主要區別就是訪問是需不需要創建對象,而對於類成員變數,所有對象是共享一個變數的。

5. java的成員變數是存在於哪裡如果是堆中該如何回收呢,能用system.gc嗎

  1. Java成員變數存儲在堆中:創建出來的對象只包含屬於各自的成員變數,並不包含成員方法。同一個類對象擁有各自的成員變數,存儲在各自的堆中,但是他們共享該類的方法,並不是創建一個對象就把成員變數復制一次。

  2. 當一個對象(包括對象中的成員變數)沒有對象引用指向原先分配給某個對象的內存時,該內存便成為垃圾。JVM的一個系統級線程會自動釋放該內存塊,可以使用system.gc

6. java 成員變數的值放在內存的哪裡

對象在堆中,而對象的數據成員當然是在對象的空間之中,因而對象的數據成員當然是在堆中了.
屬於類的數據成員當然是在類的內存空間中,而類是裝載在代碼方法區的那個內存空間中的,而這個內存空間也是堆中的一部分,因此:屬於類的數據成員當然是在堆中了.

7. c++ 類的靜態成員變數 存儲在哪一個內存區

廢話就不說了。簡單直接的回答你:放在靜態區(全局區)。
滿意請採納,謝謝

8. java中成員變數都儲存在棧內存中嗎

一個完整的Java程序運行過程會涉及以下內存區域:
寄存器:JVM內部虛擬寄存器,存取速度非常快,程序不可控制。
棧:保存局部變數的值,包括:1.用來保存基本數據類型的值;2.保存類的實例,即堆區對象的引用(指針)。也可以用來保存載入方法時的幀。
堆:用來存放動態產生的數據,比如new出來的對象。注意創建出來的對象只包含屬於各自的成員變數,並不包括成員方法。因為同一個類的對象擁有各自的成員變數,存儲在各自的堆中,但是他們共享該類的方法,並不是每創建一個對象就把成員方法復制一次。
常量池:JVM為每個已載入的類型維護一個常量池,常量池就是這個類型用到的常量的一個有序集合。包括直接常量(基本類型,String)和對其他類型、方法、欄位的符號引用。池中的數據和數組一樣通過索引訪問。由於常量池包含了一個類型所有的對其他類型、方法、欄位的符號引用,所以常量池在Java的動態鏈接中起了核心作用。常量池存在於堆中。
代碼段:用來存放從硬碟上讀取的源程序代碼。
數據段:用來存放static定義的靜態成員。

對於局部變數,如果是基本類型,會把值直接存儲在棧;如果是引用類型,比如String s = new String("william");會把其對象存儲在堆,而把這個對象的引用(指針)存儲在棧。
再如
String s1 = new String(「william」);
String s2 = s1;
s1和s2同為這個字元串對象的實例,但是對象只有一個,存儲在堆,而這兩個引用存儲在棧中。

類的成員變數在不同對象中各不相同,都有自己的存儲空間(成員變數在堆中的對象中),基本類型和引用類型的成員變數都在這個對象的空間中,作為一個整體存儲在堆。而類的方法卻是該類的所有對象共享的,只有一套,對象使用方法的時候方法才被壓入棧,方法不使用則不佔用內存。

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

成員變數並不能決定自身的存儲空間位置。決定存儲位置的對象的創建方式。

即:

  • 如果對象是函數內的非靜態局部變數,則對象,對象的成員變數保存在棧區。

  • 如果對象是全局變數,則對象,對象的成員變數保存在靜態區。

  • 如果對象是函數內的靜態局部變數,則對象,對象的成員變數保存在靜態區。

  • 如果對象是new出來的,則對象,對象的成員變數保存在堆區。