如何計算c 中開陣列中佔的記憶體

2021-09-11 08:56:40 字數 2136 閱讀 6584

引入:在比賽中一般都會有陣列的身影,但是比賽時記憶體是一定的,若是操作不當,那麼正解也會被陣列而拖累,可是如何確保自己的陣列佔的記憶體的呢???

首先要知道你自己開陣列是的型別是不一樣的記憶體的(也就是說型別不一樣,記憶體計算的方法就不一樣)

16位編譯器

char :1個位元組

char*(即指標變數): 2個位元組

bool :1個位元組

short int : 2個位元組

int: 2個位元組

unsigned int : 2個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

32位編譯器

char :1個位元組

char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器)

bool :1個位元組

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

64位編譯器

char :1個位元組

char*(即指標變數): 8個位元組

bool :1個位元組

short int : 2個位元組

int: 4個位元組

unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 8個位元組

long long: 8個位元組

unsigned long: 8個位元組

補充:int是32位,8位是乙個位元組,所以int就是4位元組。

注:(比較重要的已經被加粗)

上面的也就是說乙個這種型別的數字,佔到了這樣的型別乙個單位的記憶體

例如:

int a[

10]就是相當於開了10個數字的int型別的記憶體

那麼這樣的陣列所佔的記憶體就是 4*10

/1024

/1024

=0.00003814697265625 mb

上面的4就是int的單位記憶體(預設為32位編譯器),10就是你開的數字的數量,/1024/1024就是換算單位,換算成mb(因為一般比賽的時候都是以mb為單位)

如果還是不太明白的話,我們可以再舉乙個例子:

bool a[

1000][

1000];

記憶體=1000

*1000*1

/1024

/1024

=0.95367431640625 mb

double m[

120]

[120];

記憶體=120

*120*8

/1024

/1024

=0.10986328125 mb

可以自己編乙個**,然後運用 sizeof() 函式直接輸出它的記憶體

#include

using

namespace std;

bool a[

1000][

1000];

double m[

120]

[120];

intmain()

執行結果如下:

C 中 類 佔 記憶體問題

題目如下 若char是一位元組,int是4位元組,指標型別是4位元組,如下 class ctest virtual void mem fun private char m chdata int m ndata static char s chdata char ctest s chdata 0 問 ...

C 中 引用也佔記憶體

int a 10 int r a cout a endl cout r endl 從上面的例子當中可以看出 它們得出的結果是相同的,這時便會有人說,r和a所占用的記憶體空間是相同的,因為列印出來的位址是相同的。所以這些教材上對於引用變數的操作,稱之為宣告乙個引用變數,而非定義。因為教材的編寫者認為引...

c 中資料型別佔記憶體位元組數

可用如sizeof char sizeof char 等得出 32位編譯器 char 1個位元組 char 即指標變數 4個位元組 32位的定址空間是2 32,即32個bit,也就是4個位元組。同理64位編譯器 short int 2個位元組 int 4個位元組 unsigned int 4個位元組...