C++ sizeof 操作符的用法总结
在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。
A.参数为数据类型或者为一般变量:
例如sizeof(int),sizeof(long)等等。
这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。
例如int类型在16位系统中占2个字节,在32位系统中占4个字节。
B.参数为数组或指针:
int a[50]; //sizeof(a)=4*50=200;求数组所占的空间大小
int *a=new int[50];// sizeof(a)=4; a为一个指针,sizeof(a)是求指针的大小,在32位系统中,当然是占4个字节。
C.参数为结构或类:
Sizeof应用在类和结构的处理情况是相同的,需要考虑字节对齐(参加另一篇文章:C++自定义结构体和类 内存对齐)。另外有几点需要注意:
第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。
第二、没有成员变量的结构或类(非虚)的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。
第三、包含虚函数的类或者虚继承的类,需要算上虚表指针的占的4个字节。
下面举例说明:
Class Test{int a;static double c};//sizeof(Test)=4.
Test *s;//sizeof(s)=4,s为一个指针。
Class test1{ };//sizeof(test1)=1;
Class test2{ virtual void print(){}};//sizeof(test2)=4;
参考 http://blog.csdn.net/garfield2005/article/details/7648430
最新文章
- Spring JdbcTemplate
- Sql Server 2008卸载后再次安装一直报错
- [No000050]练习一万小时便能成为天才
- uCGUI窗口初始化过程
- 1013: [JSOI2008]球形空间产生器sphere
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 临时种群生成新父代种群 fillnds.c
- Apache-Tika解析PDF文档
- 无法远程连接服务器上的mysql
- 1~N任意三个数最大的最小公倍数(Java版)
- C#连接oracle数据库步骤
- [AHOI2006]基因匹配
- jenkins安装与配置---windows系统
- GreenDao教程2
- Mybatis 源码简述
- vue的高阶组件
- 122. 买卖股票的最佳时机 II-leetcode
- struts2.0自定义类型转换
- Spring线程池配置模板设计(基于Springboot)
- MVC控制器使用总结
- cocos2d-js Shader系列2:在cc.Sprite上使用Shader(黑白、灰度、造旧效果)