设为首页 加入收藏

TOP

9.1.1 可移植性的优缺点
2013-10-07 15:03:35 来源: 作者: 【 】 浏览:73
Tags:9.1.1 移植 缺点

9.1.1  可移植性的优缺点

可移植性通常会和效率与实现的难易程度相互制约。具体地说来,在一个或者多个平台上,容易实现的可移植代码通常都是低效的。譬如,假设我们希望清除内存中从位置p开始的n个字节。可以如下编写代码:

  1. memset(p, n, 0); 

对于每个提供了ANSI/ISO C++(www.cppentry.com)程序库的平台,这段代码都是可移植的,因为该程序库已经定义了memset函数。现在假设我们要求清除内存的这段代码具有很高的实时性;于是我们可以使用bzero函数,它清除内存的速度要比memset函数快,但只有某些平台提供这个函数:
  1. bzero(p, n);    //要比memset(p, n, 0)快。 

然而,bzero函数可能并不在ANSI/ISO C++(www.cppentry.com)程序库里面;因此调用bzero函数可能会破坏我们代码的可移植性。

为了保留原来的移植性,并且在含有 bzero 函数的系统中体现实时的要求,我们可以如下改写我们的代码:

  1. #indef HASBZERO  
  2.           bzero(p, n);  
  3.      #else  
  4.           memset(p, n, 0);  
  5.      #endif  

我们假设某些定义有HASBZERO的平台都会提供bzero函数。另外,如果我们在好几个地方都调用了bzero函数,我们也可以自己编写一个bzero函数,让那些没有提供bzero函数的平台也可以调用这个函数:
  1. bzero. h:  
  2.      #include<stdlib.h> 
  3.      #include<memory.h> 
  4.      #ifndef HASBZERO  
  5.      inline void* bzero(char* P, size_t n){  
  6.           return memset(p, n, 0);  
  7.      }  
  8.      #endif  

如果所有提供bzero函数的平台都把这个函数包含在stdlib.h头文件中,那么当我们需要清除内存的时候,就可以如下编写代码:
  1. #include<bzero.h>  //bzero.h头文件已经包含了stdlib.h头文件  
  2.     //...  
  3.     bzero(p, n);  

这段代码不但是可移植的,而且是高效的。然而,与前面只是简单地调用memset函数相比,这段代码的实现又是困难的。通常地讲,把实际代码移植到很多平台都会使代码变得复杂,甚至很不优雅。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇9.1.2 目标代码和创建过程的可移.. 下一篇9.1 有编写可移植代码的必要吗

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: