如何计算c++中开数组中占的内存

如何计算c++中开数组中占的内存

引入:在比赛中一般都会有数组的身影,但是比赛时内存是一定的,若是操作不当,那么正解也会被数组而拖累,可是如何确保自己的数组占的内存的呢???

首先要知道你自己开数组是的类型是不一样的内存的(也就是说类型不一样,内存计算的方法就不一样)

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() 的使用)[比较方便]

可以自己编一个代码,然后运用 sizeof() 函数直接输出它的内存

#include
using namespace std;
bool a[1000][1000];
double m[120][120];

int main()
{
	cout<<"内存="<<double(sizeof(a))/1024/1024<<endl;
	cout<<"内存="<<double(sizeof(m))/1024/1024<<endl;
	return 0;
}

运行结果如下:
如何计算c++中开数组中占的内存_第1张图片

如果有错误,请找到博主(QQ:2158551174),博主会自行纠正。

你可能感兴趣的:(其他)