C++高质量编程点滴

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论


  
  合理: 

  for( int i = 0; i < 4; i++ ) 
  { 
   for ( int j = 0; j < 4; j++ ) 
   { 
   aMatrix[i * 4 + j ] = j * 4 + i; 
   } 
  } 

  解析:   

  尽量保证顺序的访问数组的每一个元素。由于Windows内存的管理模式,内存是分页管理的。顺序访问数组可以基本保证页面不会来回切换,从而减少了页失效的数量,提高了程序的整体性能。这种性能的提升对于大的数组尤为明显。   

  六、你需要用3个float值来表示一个三维的点,并要写一个函数对一个三维点的数组进行计算赋值。  

  不合理: 

  void foo( float *pPoints[3] ) 
  { 
   float aPoint[3] = { 1.0f, 2.0f, 3.0f }; 
   int nCount = (int)_msize( pPoints ); 
   for ( int i = 0; i < nCount; i++ ) 
   { 
   pPoints[0] = aPoint[0]; 
   pPoints[1] = aPoint[1]; 
   pPoints[2] = aPoint[2]; 
   } 
  } 

  合理: 

  struct POINT3 
  { 
   float x, y, z; 
  }; 
  void foo( POINT3 *pPoints, int nCount ) 
  { 
   POINT3 Pt = { 1.0f, 2.0f, 3.0f }; 
   for ( int i = 0; i < nCount; i++ ) 
   { 
   pPoints = Pt; 

   } 
  } 

  解析:   

  有两点,一,不要使用_msize对数组的大小进行测定,_msize只能对使用malloc或calloc申请的内存进行大小测定,对于其它的如new或一些API,将会导致程序的崩溃。在设计此类需要传入数组的函数时,别忘了把数组的元素数量也做为参数一并传入,哪怕它是固定的,这将是一个良好的习惯。二,对于float[3]这种类型,尽量避免直接使用它,最好的办法就是用struct对其进行简单的封装,在复制的时候直接使用“=”就可以进行准确的按位赋值了。 

  七、你有一个函数的定义,在这个函数中会new一个比较大的对象Data,并在计算后将它删除。但这个函数将被频繁调用。   

  不合理:   

  void foo( void ) 
  { 
   Data *p = new Data; 
   CalcData( p ); 
   delete p; 
  } 
   
  合理: 

  char Buf[sizeof(DATA)]; 
  void foo( void ) 
  { 
   Data *p = new(Buf) Data; 
   CalcData( p ); 
  } 
  
  解析:   

  new(buf) type;是定位的new语法,它不会真正的分配内存,而是简单的在指定的已分配的内存起点上划分出一段与类型大小匹配的空间,并直接在这段内存上对该类型进行构造对象,并返回对象的指针。由于它没有真正的分配内存空间,因此它的效率是非常高的,在类似于上述例程中,频繁申请和释放一个大对象的操作,定位的new可以带来很大的效率提升。

上一页123下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答