有关数据类型的范围问题!!

在面试或者国内几个大厂的在线笔试中,编程总会设置一个数据范围。基本上都是10的9次方,也就是数量级是10亿!

这里先不考虑内存的限制,那么定义一个数亿级的数组会不会有问题,有没有超出范围,怎么确定你的数组有没有越界啊?

我们以32位系统为例,32位系统,虚拟内存的大小为4GB,也就是可管理的物理内存最大为4GB。

如果是无符号的数(unsigned int),32位系统下其大小为2的32次方减去1,这个数字是42,9496,7295。这个数在42亿以上。

如果是有符号数字(int),表示出来是32位数的最高位为符号为,则将最大的无符号数右移一位,相当于除以2,则有符号整数的范围为-21,4748,3648~21,4748,3647.这里我们可以看出,这个有符号数的范围大致在21亿以上。

那么其他的数据类型的范围也可以知道了。依照其所占的位数就可以判断出其范围。

那么这里有个问题,我们定义一般的静态数组的时候,一般是在栈里面。那么栈的空间大小是多少?

依照不同的操作系统,栈空间大小也不同,下面是几种主流的操作系统栈空间的大小:

Sunos/Solaris->---------------->8M

Linux->--------------------------->10M

Windows->---------------------->1M

AIX->------------------------------>64M

动态数组呢?由堆决定,32位系统中除去运行内核的1GB空间,可用的应当不超过3GB。

你可能感兴趣的:(有关数据类型的范围问题!!)