LoadRunner中sizeoft函数解说

上一篇 / 下一篇  2011-10-27 14:10:33 / 个人分类:LoadRunner

sizeof是返回一个对象或者类型所占的内存字节数。 
sizeof有三种语法形式,如下: 
    1) sizeof( object );    // sizeof( 对象 ); 
    2) sizeof( type_name ); // sizeof( 类型 ); 

sizeof可以对一个表达式求值。编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。 

例如: 

sizeof( 2 );        // 2的类型为int,所以等价于 sizeof( int );结果等于4

sizeof( 2 + 3.14 ); // 3.14的类型为double,2也会被提升成double类型,所以等价于 sizeof(double); 结果等于8

sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。我们来看一个完整的例子:

int foo(){

    printf("foo() has been called.\n");

    return 0;

}

 Action(){

    lr_output_message("sizeof_________________-( foo() ) = %d\n", sizeof( foo() ));

return 0;

}结果等于4

定义变量
struct T
{
  char ch;
  int   i   ;
};
使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节
但最最终结果确实8
sizeof的常量性 :sizeof(char [50]);结果就是50
基本数据类型的sizeof :short、int、long、float、double这样的简单内置数据类型
指针变量的sizeof :
char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)(); // 函数指针
sizeof( pc ); // 结果为4
sizeof( pi ); // 结果为4
sizeof( ps ); // 结果为4
sizeof( ppc );// 结果为4
sizeof( pf ); // 结果为4
数组:char a1[] = "abc";sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符
int a2[3]; sizeof( a2 ); // 结果为3*4=12(依赖于int)
解说:
对齐模数的准则是:对齐模数最大只能是4,也就是说,即使结构体中有double类型,对齐模数还是4,所以对齐模数只能是1,2,4。
struct T
{
  char ch;
  double   d   ;
};
结果 等于12
int=1,short=2,char=4,double=8,char[4]=4,char a []="abc"结果=4 
OK{char,short,int,double}对象结果是16;OK{char,short,short,int,double}结果是20因为char,short相加等于3在加+1,第二个short要对齐则是3+1<对齐符> +int<4>+double<8>=16
如果只有char和short则以short为单位符2,
总结:同一个类型如果<4则添加符
不同类型添加符方式从小到大char < short<int<double
如果有char也有short则以2为一个单元
有char,short,int则以4为一个单元
有short,int则以4为一个单元
想加之后一定要是4的倍数


TAG:

 

评分:0

我来说两句

Open Toolbar