起因
今天刷OJ发现一个有意思的事儿。题目中需要计算一定范围内的质数,我申请了一个数组,所有元素有0、1、-1三种状态。如果数组使用int的话用时240ms,36M内存。如果换成char就变成了140ms,9M内存。这就引出了两个问题:1. 为什么变快了;2. char原来是有符号的?
char的符号
这个问题很好解决,Google之后发现C标准中将char规定为Implementation Defined(由实作环境决定)。具体而言,arm平台上char是无符号的,而intel平台上char是有符号的。
如果想验证的话,在自己的平台上给char赋值128,如果是无符号整数那么输出应该还是128,如果是有符号整数那么输出应该是-128。
char的计算
缺乏这方面知识,查完相关资料在补充这段吧。
bool的存储
跟同学的代码进行对比之后我又发现一个问题:他的数组使用的是bool,但内存消耗跟我一样!这说明bool虽然只有0和1两种状态,但在内存中却占用了一个byte而非一个bit。
如果想验证的话,申请一个bool数组,全部赋值为1,然后一个byte一个byte往外读。如果是按bit存储,这个字节内容应该是11111111,如果是按byte存储,应该是00000001。