20140321 sizeof 虚函数与虚函数表 静态数组空间 动态数组空间 位字段
1、静态的数组空间char a[10];sizeof 不能用于1:函数类型 2:动态的数组空间new3:位字段
函数类型:int fun();sizeof(fun())计算的是返回类型的大小,并不是函数大小,函数要在运行时才知道其大小,而sizeof是编译时操符号
动态分配数组:sizeof()只是符号表,是编译的时候确定大小的。动态分配是运行过程中得到大小的,所以sizeof不能计算动态分配的数组大小。如:以下程序就动 态分配了数组a[N]。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。
#include<stdio.h> #include<malloc.h> void main() { int *a; int N; scanf("%d", &N); a = (int *) malloc(N * sizeof(int)); printf("%d", sizeof(a)); free(a); }
输出结果为:4。4实际上就是指针的大小,并不是动态分配的数组a的大小
位字段:它主要用于一些使用空间很宝贵的程序设计中,如嵌入式程序设计。
看如下位字段的定义:
typedef struct bit_field { unsigned int a : 5; unsigned int b : 3; unsigned int c : 20; unsigned int d : 4; } bit_field_s;
在如上定义中,bit_field_s结构体只占用一个DWORD的空间,即4个字节。其中成员a占用5位,成员b占用3位,成员c占用20位,成员d占用4位。我们可以对 bit_field_s结构体的成员进行如下赋值:
2、sizeof(string)会根据编译器的不同而不同。我的VS2010是32,面试宝典上是http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html
3、虚函数与虚函数表http://www.cnblogs.com/Ripper-Y/archive/2012/05/15/2501930.html