陣列的記憶體使用

2021-10-03 13:25:17 字數 1194 閱讀 2952

陣列的記憶體使用首先要引入乙個記憶體簡略的概念

棧(srack) 每乙個執行緒包含乙個stack區,只儲存基本資料型別的物件和自定義物件的引用

堆 (heap) 儲存的全部是物件,每個物件都包含乙個與之對應的class的資訊

當我們定義乙個陣列時候 定義的這個陣列進入棧;

當將其實例化new的時候 會在堆開闢記憶體 用於儲存陣列;

這時候 棧中定義的陣列就會得到堆中開闢陣列物件所在的位址

如圖所示

當陣列得到了其在堆中對應的位址的時候,就會通過這個位址去尋找堆中所對應的資料;

可以通過以下例項說明

int

array1;

array1=

newint[3

];array1[0]

=1; array1[1]

=2; array1[2]=3;

這段**中 首先定義乙個陣列 這死後棧中就儲存了這個陣列array1;

當arry1=new int的時候這個陣列就被例項化 此時在堆中開闢陣列空間,此時棧中的arry1 獲得了其對應在堆中的位址;

再通過棧中對應的位址 去尋找堆中的資料進行賦值;

如圖

所以如果當有兩個陣列如array1和array2建立,並且array2=array1;時 那麼這兩個陣列棧中的位址都指向array1,對他們兩個進行賦值的時候 後者會將前者覆蓋掉;

此時array1中的數為 1 2 3;

當array2=array1的時候 在對其進行賦值 則 之前aray1中的數變成了 4 5 6

以上小白的是個人理解,如有有什麼不對的地方歡迎各位大佬指點

陣列的記憶體布局

先看下面的例子 int a 5 1.記憶體布局的示意圖所有人都明白這裡定義了乙個陣列,其包含了5個int型的資料。我們可以用a 0 a 1 等來訪問陣列裡面的每乙個元素,那麼這些元素的名字就是a 0 a 1 嗎?看下面的示意圖 如上圖所示,當我們定義乙個陣列a時,編譯器根據指定的元素個數和元素的型別...

使用記憶體管理函式實現動態陣列

c語言提供了一些記憶體管理函式,這些記憶體管理函式可以按需要動態地分配記憶體空間,也可把不再使用的空間釋放,為有效地使用記憶體資源提供了手段。動態陣列,指的就是利用記憶體的申請和釋放函式,在程式的執行過程中,根據實際需要指定陣列的大小。其本質就是乙個指向陣列的指標變數。主要用到的記憶體管理函式是 m...

陣列記憶體堆疊

陣列 用於儲存一組同一資料型別資料的容器 陣列會對放入其中的資料自動編號,編號是從0開始的 下標 定義格式 資料型別 陣列名 new 資料型別 陣列的大小 可以先宣告再初始化 int arr new int 5 定義了乙個最多能儲存5的整數的陣列 arr 3 4 arr 3 通過陣列名 下標 的形式...