转:http://baike.baidu.com/view/1356720.htm sizeof是运算符,可用于任何变量名.类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号.    它在编译时起作用,而不是运行时.    这是初学者问得最多的一个问题,所以这里有必要多费点笔墨.让我们先看一个结构体: struct S1 { char c; int i; }; 问sizeof(s1)等于多少聪明的你开始思考了,char占1个字节,int占4个字节,那么加起来就应该是5.是这样吗…
记住几句话: 结构体的长度一定是最长的数据元素类型的整数倍: 某数据元素的起始地址能被该类型所占的字节数整除: 静态变量是存放在全局数据区,而sizeof计算栈中分配的大小,不包括static变量: #include <iostream> #include <stdio.h> using namespace std; short a1; short a2; short a3; }A; char c1; char c2; short s; int i; }B; char c1; sh…
#include <iostream> #include<assert.h> using namespace std; typedef struct sys{ char a; int * b; char c; }sysa; class c{ public: unsigned a; virtual void bi(c* s); char dd; static int sd; }; int main() { char str2[100]; cout<<sizeof(str2…
C++并没有规定各种数据类型在内存中的存储大小,依赖于不同的编译器的不同而不同,要想获知当前编译器对各种数据类型分配的大小,可以通过sizeof运算符来获取. 使用方法1: sizeof(数据类型)   使用方法2: sizeof(变量名   或 常量名 或 表达式  ) sizeof(int)      或 int  a: sizeof(a) //数据类型空间分配情况 #include <iostream> using namespace std; int main() { cout<…
工作中面试中对于字节对齐基本上是必考一个知识点,而很多面试是网络上上原题.基本上背一背就可以写正确,而关于4字节对齐我相信很多人也只是一个基本地了解,对于一些题目就感觉有问题,而且很多blog后面仍然有很多人在问一些题目,说明该blog并没有讲清楚这个问题.然后我自己也有疑问,所以就找了一些更多资料,终于是解了. 比如说 对于32位机器 1 #pragma pack(4) 2 struct a{short a;short b;short c;} ; 3 sizeof(a)==6 //为什么不为8…
转:http://blog.chinaunix.net/uid-722885-id-124878.html 1. sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求: sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=…
32位机器上定义如下结构体: struct xx { long long _x1; char _x2; int _x3; char _x4[2]; static int _x5; }; int xx::_x5; 1 请问sizeof(xx)的大小是()//24 首先_x5是静态变量可以不用管它 ,其次是要考虑字节对齐的问题.对于结构体中没有含有结构体变量的情况,有两条原则: 1)结构体变量中成员的偏移量必须是成员大小的整数倍: 2)结构体的最终大小必须是结构体最大简单类型的整数倍. x1的偏移量…
Compiler Error C2719 'parameter': formal parameter with __declspec(align('#')) won't be aligned The align __declspec modifier is not permitted on function parameters. Function parameter alignment is controlled by the calling convention used. For more…
本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上?             成员函数可以被看作是类作用域的全局函数, 不在对象分配的空间里, 只有虚函数才会在类对象里有一个指针, 存放虚函数的地址等相关信息(即虚函数表). 成员函数的地址,编译期就已确定,并静态绑定或动态的绑定在对应的对象上.对象调用成员函数时,编译器可以确定这些函数的地址,并通过传入this指针和其 他参数,完成函数的调用,所…
原文:http://krystism.is-programmer.com/posts/41468.html 学过c的都知道sizeof运算符.不过还是需要注意以下几点.先从c的sizeof说起: 1. sizeof 是运算符,而不是函数.虽然我们习惯sizeof(...),但( )并不是必需的,它只是表示优先级.我们把sizeof后面的目标叫对象或者操作数.本文约定就叫sizeof对象. 2. 当sizeof 的对象是表达式时,求的大小是表达式返回值的类型大小,但并不计算表达式的值,比如 ? 1…