【Java】sizeof小览有感

本文探讨了C++和Java中sizeof运算符的应用,重点讨论了不同环境下基本类型如int的大小,并分析了为何在多数32位系统中int通常是4个字节。通过实例展示了char数组的sizeof计算,强调了在不同编译器中类型大小的差异。最后,文章引用了《C++ primer》中的描述,解释了int类型通常与CPU字宽一致的历史原因。
摘要由CSDN通过智能技术生成

今天准备写读书笔记blog的时候,偶然看到CSDNblog首页的一篇关于sizeof的文章,帮我解决了关于sizeof的许多疑难杂症。

贴出来分享给大家:
http://blog.csdn.net/scythe666/article/details/47012347

原文就不复制了,大家点击看吧,尊重原作者。

记得某次朋友去面腾讯的C++岗实习,面试官也问了他sizeof的问题,他是C++大神,回答之前就和考官确认“老师您的机器是32位还是64位的”,他说考官当时就笑了,估计这个考官就是埋伏的这个点吧。

然后我就回家试了下sizeof的东西,但是还是很不系统的了解,今天看了这篇文章后,我在网上查看了很多siezeof的相关内容,系统地解决了自己关于sizeof这个疑难杂症,整理一下当作自己的学习笔记吧。

1,基本类型的sizeof()值

首先,绝大多数的我们普通学生,基本都是win32机,使用vc,所以对于我们普通人来说,在这种环境下,各类型的sizeof如下:

C类型32位64位
char11
int44
float44
double88
short int22
long int48
long long int88
char*48

需要说明一下的是所有指针类型存储的是所指向变量的地址,所以32位机器只需要32bit,而64位机器需要64bit。

Code:

#include <iostream>

using namespace std;
int main()
{

cout<<"sizeof(int)=="<<sizeof(int)<<endl;
cout<<"sizeof(float)=="<<sizeof(float)<<endl;
cout<<"sizeof(double)=="<<sizeof(double)<<endl;
cout<<"sizeof(char)=="<<sizeof(char)<<endl;
cout<<"sizeof(short int)=="<<sizeof(short int)<<endl;
cout<<"sizeof(long int)=="<<sizeof(long int)<<endl;


char p1[] = { 'a', 'b', 'c', 'a', 'b', 'c' };
char p2[] = "abcdef";
cout<<sizeof(p1)<<endl;
cout<<sizeof(p2)<<endl;

return 0;
}

Output:

sizeof(int)==4
sizeof(float)==4
sizeof(double)==8
sizeof(char)==1
sizeof(short int)==2
sizeof(long int)==4
6
7

这里解释下char数组两种实例化方法的不同,第一种是没有’\0’的,我专门写出来加深下印象,另外p1、p2是数组的sizeof,这里不是指针变量,数组的sizeof值是数组长度*元素类型sizeof值。

2,不同环境下int变量的sizeof()

int占多少个字节是由编译器决定的。

  • ansi标准定义int是占2个字节.

  • tc是按ansi标准的,它的int是占2个字节的.

不同的编译器,规定也不一样。float,double也是一样的,在不同的编译器里,占的字节是不一样的。

3,为什么int是4个字节

说int和void*一样长只是因为在一般情况下它们都应该可以放到单个寄存器里,其实这样说很不确切,还是不要这样理解的好:说在xx位的cpu上int是多少位只是因为这级别的cpu有对xx位数据进行操作的单条指令(因为寄存器是xx位)(可能会有扩展指令,我不清楚,但关键看寄存器的位数),从而编译器就图个方便把int做为xx位;这也不一定的,譬如以后64位机器出来了,可能编译器只是把long扩到64位,而int还是当作32,也挺合适的。

int是最基本的类型,一般和CPU的字宽一致。

《C++ primer》中的描述:“一般地,short类型为半个机器字(word)长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中,int类型和long类型通常字长是相同的)。”其实这是个历史遗留问题,16位时期long就是32位的,为了兼容。而int应该是最适合当前机器的字长,所以也是32位的。


参考资料:
http://bbs.csdn.net/topics/390539467
http://www.cnblogs.com/hnrainll/archive/2011/07/06/2098999.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值