陣列在記憶體中是連續存放的嗎

2021-10-06 14:33:20 字數 2373 閱讀 1966

用棧宣告的時候很明顯,都是連續的。

在堆上的時候,由於是分批次分配記憶體(首先new出或malloc多少行,然後每一行再分別new),因此其存放是平行的幾條連續儲存,每一行是連續的,行與行之間並不連續。為此,我們嘗試建立乙個2x4的二維矩陣如下

a b c d

e f g h

列印其位址來證明。**如下,為了直觀,略去了一些安全檢查。

#include

#include

#include

using namespace std;

#ifdef __cplusplus

extern

"c";

#endif

void

c_stack()

,};for

(int i =

0; i <

2; i++

)printf

("\n");

}printf

("********************=\n\n");

}void

c_malloc()

printf

("\n");

}for

(int i =

0; i <

2; i++

)free

(str[i]);

free

(str)

;printf

("********************\n\n");

}void

cxx_stack()

,};for

(int i =

0; i <

2; i++

) cout<} cout<<

"********************=="

<}void

cxx_new()

cout<}for

(int i =

0; i <

2; i++

) delete [

]str[i]

; delete str;

cout<<

"********************"

<}int

main()

編譯執行:

admin@ubuntu

:~ $ g++

newadmin@ubuntu:==

==== c stack ==

====

[a]0x7fffa8e11cb0

[b]0x7fffa8e11cb1

[c]0x7fffa8e11cb2

[d]0x7fffa8e11cb3

[e]0x7fffa8e11cb4

[f]0x7fffa8e11cb5

[g]0x7fffa8e11cb6

[h]0x7fffa8e11cb7

====

====

====

====

*****==

==== c malloc ==

====

[a]0xec6030

[b]0xec6031

[c]0xec6032

[d]0xec6033

[e]0xec6050

[f]0xec6051

[g]0xec6052

[h]0xec6053

====

====

====

====

====

====

==== cpp stack ==

====

[a]0x7fffa8e11ca0

[b]0x7fffa8e11ca1

[c]0x7fffa8e11ca2

[d]0x7fffa8e11ca3

[e]0x7fffa8e11ca4

[f]0x7fffa8e11ca5

[g]0x7fffa8e11ca6

[h]0x7fffa8e11ca7

====

====

====

====

*****==

====

== cpp new

====

==[a]

0xec6050

[b]0xec6051

[c]0xec6052

[d]0xec6053

[e]0xec6030

[f]0xec6031

[g]0xec6032

[h]0xec6033

====

====

====

====

====

=

關於陣列在記憶體中的存放形式

char a 3 3 sizeof a 結果是9 9這個結果一直認為是 理所當然 但是當自己實現乙個二維陣列時,最簡單的方式就是 char test char malloc sizeof char row size int i 0 for ichar malloc sizeof char col s...

bmp在記憶體中的存放

bmp 儲存影象 每張圖按大小來儲存,即影象的長寬畫素大小。如果一張的畫素是 240x320,則此影象在記憶體的存放是乙個 240x320的陣列,每個陣列的元素是int整形 整數占用4個byte 數位相機中所謂的支援500w畫素就是這個意思,代表它能處理多大的圖形色彩資訊的能力,畫素越高,需要處理時...

資料在記憶體中的存放

在計算機系統中,執行的應用程式的資料都是儲存在記憶體之中 不同型別的資料,儲存的記憶體區域不同,其中包括 1 棧區 stack 由編譯器自動分配並釋放,一般存放函式的引數值,區域性變數等 2 堆區 heap 由程式設計師分配和釋放,如果程式設計師不釋放,程式結束時,可能會由作業系統 3 暫存器區 用...