高效C

0. 避免不必要的函数调用

考虑下面的2个函数:

void str_print( char *str )
 
{
 
    int i;
 
    for ( i = 0; i < strlen ( str ); i++ ) {
 
        printf("%c",str[ i ] );
 
    }
 
}
void str_print1 ( char *str )
 
{
 
    int len;
 
    len = strlen ( str );
 
    for ( i = 0; i < len; i++ ) {
 
        printf("%c",str[ i ] );
 
    }
 
}

 请注意 这两个函数的功能相似。然而,第一个函数调用strlen()函数多次,而第二个函数只调用函数strlen()一次。因此第二个函数性能明显比第一个好。 

 

1.节约内存(内存对齐和填充的概念)

struct {
 
    char c;
 
    int i;
 
    short s;
 
}str_1;
struct {
 
    char c;
 
    short s;
 
    int i;
 
}str_2;

  

假设一个字符需要1个字节,short占用2个字节和int需要4字节的内存。起初,我们会认为上面定义的结构是相同的,因此占据相同数量的内存。然而,而str_1占用12个字节,第二个结构只需要8个字节?这怎么可能呢?

请注意,在第一个结构,3个不同的4个字节被分配到三种数据类型,而在第二个结构的前4个自己char和short可以被采用,int可以采纳在第二个的4个字节边界(一共8个字节)。

posted on 2014-12-06 19:56  Hugh_Sun  阅读(126)  评论(0)    收藏  举报

导航