引入:在比賽中一般都會有陣列的身影,但是比賽時記憶體是一定的,若是操作不當,那麼正解也會被陣列而拖累,可是如何確保自己的陣列佔的記憶體的呢???
首先要知道你自己開陣列是的型別是不一樣的記憶體的(也就是說型別不一樣,記憶體計算的方法就不一樣)
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個位元組...